1樓:羿愷熊珠佩
雖然理論上可以這麼做,但是我想不出有什麼必要,非得把乙個指向結構體成員的指標指向乙個陣列,從邏輯上來說完全沒有道理。
2樓:匿名使用者
直接成員名稱啊。
struct tagstudent;
typedef struct tagstudent student;
student * p;
p->age = 16;
如果用p指向結構體內成員,勸你不要這麼做,因為結構體資料為了效率,編譯器都會做資料對齊處理,你的**極可能出錯。
還有就是 p 是指向結構體的指標,如果要通過它訪問內部成員,必須強制型別轉換。
所以,放棄這個想法吧
3樓:玻璃麥田
指向成員直接用p->成員名就可以了;沒有現成的指向下乙個成員的用法吧。
或者p=p+sizeof(p->當前成員名),但是好像沒有必要這麼複雜吧?
4樓:
你也可以看下下面這個blog
應該是不可以的,要麼就只能自己寫乙個類。
因為結構體的記憶體分配跟成員的偏移量和成員的型別有關。
5樓:匿名使用者
你可以直接用結構體的名字, 如結構體
struct student ;
有個struct student的指標p的話, 可以直接用p->id, p->name這樣的方式來指向它的各個成員.
6樓:匿名使用者
指標是首位址,那麼根據對齊方式,是否可以直接根據偏移位址,取出相應成員呢?
7樓:滄海雄風
struct student st[100];
st[i].呼叫的
st[i].name
st[i].id
隨便什麼型別
c語言結構體成員的引用問題
8樓:stone李想
scanf的用法,格式後的引數都必須是位址,name是陣列名,本身就是資料,age和***都是整型資料,必須使用取位址符&。
p是struct student*型別,stu是stu[3]這個陣列的第乙個元素的位址,p指向第乙個元素,因此abc都是對的,d錯在把(int*)變數值賦值給(struct student*)變數,有個強制轉換則不會錯,因為age是結構體第乙個變數,其位址就是結構體變數的位址。
是指標間的賦值,必須保證左右運算元的指標型別是一致的。由於n是結構體sk的第乙個變數,因此其位址與結構體變數位址相同,可以強制轉換得到正確的位址。
c是乙個二維陣列,p是乙個指向陣列的指標,因此p的*運算都是得到乙個陣列,**運算才能取到陣列中的值。只有d是**運算。
9樓:
#include "stdio.h"
typedef struct
ex;ex = ;//賦值方式不對,結構體中成員a是指標變數,不能這樣賦值,按照你下面程式的意思應該是ex x=;a是int型變數,a在賦值前已經定義過:int c;
ex *px = &x;
main()
你的**是不正確的
*(px->a)等價於*(*px).a
px->b等價於(*px).b
10樓:匿名使用者
我忘了 ex = ; 這樣的初始化是否合法了,如果合法的話,那就是編譯器做了工作,把
ex = ; 轉換成了 (*ex.a) = 10;ex.b = 99;
11樓:孤松獨海
指標引用任何變數都是這樣引用的 ,規定的
12樓:出家人詞悲
結構體成員運算子。
->指標運算子。
1、如果結構體中的成員均為一般變數(包括結構體變數),則使用「.」,如果成員變數為指標(不管指向什麼,包括結構體),則使用「->」。
2、如果定義了結構體陣列指標,則可分別使用「.」和「->」,區別在於指標帶下標時,以是陣列形式訪問,此時用「.」,如果不帶下標(或使用偏移),此時用「->」。如:
struct myt
myt;
myt *pm;
pm = malloc(sizeof(myt)*100); //定義100個元素的結構體陣列
pm->i=1; //訪問結構體陣列指標中第乙個元素的成員變數i
(pm+49)->i=50; //訪問結構體陣列指標中第50個元素的成員變數i
pm[49].i=50; //功能同上一句
free(pm);
c語言中如何在多個檔案中引用同乙個結構體
13樓:滄海雄風
把結構體定義在乙個公共標頭檔案裡 然後都包含這個標頭檔案
14樓:匿名使用者
引用結構
來體有引用型別,和引用全域性自變數bai兩種方式。
1 引用型別。
需要du將結構體定義
zhi與標頭檔案中(.**件),然後在dao需要引用型別的原始檔(.c)中,均引用該標頭檔案,即可使用該型別。
2 引用全域性變數。
要引用全域性變數,需要先引用型別,之後在乙個原始檔中定義全域性變數,在其它原始檔中宣告該全域性變數,即可使用。
比如結構體為struct test, 定義全域性變數為struct test glabol_test;
在其它檔案中,只需要
extern struct test globol_test;
即可在對應檔案宣告所在行之下進行呼叫。
ps:該宣告部分,也可以寫在定義結構體的標頭檔案中。
15樓:匿名使用者
在包含結構體的檔案開始加一行
#pragma once
這樣只編譯一次
16樓:匿名使用者
//file2.c
#include "file1.h"
#include "file3.c"
st gg;
c語言乙個結構體如何在多個原始檔裡面呼叫?
17樓:
foo.**件裡面寫
#ifndef _foo_h_
#define _foo_h_
struct foo
;#endif
然後每乙個需要這個結構體的檔案都加標頭檔案 foo.h
18樓:
標頭檔案裡用extern struct ***; 其中乙個.c檔案裡 struct ***;
其他.c要用的話吧這個標頭檔案包含進去。
19樓:匿名使用者
引用結構體有引用型別,和引用全域性變數兩種方式。
1、引用型別。
需要將結構體定義與標頭檔案中(.**件),然後在需要引用型別的原始檔(.c)中,均引用該標頭檔案,即可使用該型別。
2、引用全域性變數。
要引用全域性變數,需要先引用型別,之後在乙個原始檔中定義全域性變數,在其它原始檔中宣告該全域性變數,即可使用。
比如結構體為struct test, 定義全域性變數為struct test glabol_test;
在其它檔案中,只需要
extern struct test globol_test;
即可在對應檔案宣告所在行之下進行呼叫。
c語言結構體陣列成員怎麼賦值,C語言結構體陣列成員怎麼賦值?
會飛的小兔子 intmain void printf d,s n bao.id,bao.name 輸出是4224528,空 應該是null structstudentsbao 可以。第一種賦值方法 strcpy bao.name,bao 可以,printf d,s n bao.id,bao.name...
c語言結構體定義,C語言結構體定義
c語言結構體定義 struct為結構體關鍵字,tag為結構體的標誌,member list為結構體成員列表,其必須列出其所有成員 variable list為此結構體宣告的變數。結構體是c語言中聚合資料型別 aggregatedatatype 的一類。結構體可以被宣告為變數 指標或陣列等,用以實現較...
c語言結構體中的陣列怎麼賦值,C語言,結構體中的陣列怎麼賦值,?
念憶 intmain void printf d,s n bao.id,bao.name 輸出是4224528,空 應該是null structstudentsbao 可以。第一種賦值方法 strcpy bao.name,bao 可以,printf d,s n bao.id,bao.name bao...