c語言怎麼引用結構體的下成員,c語言怎麼引用結構體的下乙個成員?

時間 2021-12-22 20:58:53

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...