c語言中陣列指標和結構體指標問題

時間 2021-08-11 17:49:52

1樓:匿名使用者

樓上都說的很不錯。針對補充,我說兩句

結構體名字不是指標,結構體陣列的名字才是指標

就好像int x;.....x不是指標,int x[2].....x是常量指標

同樣 struct aa{};...aa x;...x不是指標,aa x[3]....x是常量指標

對於陣列int a[2]=,我們通常把a看成是指標

但實際上,這個指標並不存在的,a代表這個陣列的首地址,只有才參與表示式運算時,才暫時轉化為常量指標(不可更改)

所以&a,取出的這個實際不存在的指標的地址,同陣列第一個元素的地址是一樣的

換個例子,如果你這麼定義

int a[3],*p=a;

printf("%d",&p);........就是p的自身地址,類似你上面的***x

printf("%d",p);..........就是陣列a的首地址,類似你上面的yyyy

總結你定義一個普通指標p的話,p和&p是不同的

你定義一個陣列a的話,a和&a是相同的,因為c中只是把a看做常量指標,而不是實際存在的

2樓:邊介

看了下你的**和表明,

如果你說的陣列變數的名字是一個指標,那麼你可以試下把別的地址傳給它試下,既然不能存別的地址,也能叫指標?

還有 最後那裡

我沒去除錯一下是不是真的也輸出yyyy這個地址值,但是你可以知道指標的指標是拿指標的地址來做運算的,int *p,**p,n=5;

*p=&n;

**p=&p;

確實p的值就是n的地址,但是p自己的地址就可以被指標的指標拿去了&p就是指標的地址,那麼現在你的那個輸出我就不理解了,實際上確實是***x

3樓:

結構體是一種資料型別,陣列不是一種而是0~maxint種資料型別,所以結構名是一個變數名,陣列名是一組變數名,所以結構體變數不代表地址,陣列名是地址,所以陣列名是一個常量指標,陣列名用取址運算子得到的是一批變數的首地址所以和陣列名錶示的常量指標相同。結構體是不同型別的變數的集合,形一個新的資料型別,所以結構和預定義變數一樣,是一個真正的變數,所以變數名不是指標而地址也和變數一樣必須用取址運算子獲取。

4樓:

因為func1的形參為指向結構體的指標,所以呼叫時需加&取結構體地址

5樓:十指跳舞的男人

因為func1()的引數是個指標,所以要取引數的地址!

輸出的區別就是取值和取地址!

6樓:匿名使用者

printf("a = %p\n", &a); 改為printf("a = %d\n", &a);

c語言 結構體陣列指標 與malloc記憶體分配的問題 80

7樓:匿名使用者

struct student *list;

int count = readstudentinfo("假設這是檔名", &list);

這個函式是這樣被呼叫。

裡面應該這樣寫

int readstudentinfo(const char* filename, struct student** pstudents)

8樓:匿名使用者

這麼多,。。。。。。。

c語言中的指標陣列和陣列指標的區別

9樓:黑丶雨

指標陣列:陣列裡的每一個元素都是指標如*p[10],裡面的 p[0] 到 p[9] 都是指標;

可參考:http://baike.

陣列指標:指向一個陣列的指標,如 arr[10] 是一個陣列, 讓一個指標指向這個陣列 p = arr;

訪問時通過 *(p + n) 或 p[n] 訪問元素值,n為元素索引值;

可參考:http://baike.

10樓:育知同創教育

int (*p)[4]; // 定義一個陣列指標,指向含4個元素的一維陣列,陣列元素是int型別。

int *p[4]; // 定義一個指標陣列,陣列中每個元素是一個指標,指標指向**就要根據程式來定了。

判斷陣列指標與指標陣列主要通過運算子的優先順序來判斷。

int (*p)[4]; // 由於( )的優先順序高,說明p是一個指標,指向一個一維陣列的指標

int *p[4]; // 由於[ ]的優先順序高,先與p結合成為一個陣列,再由int*說明這是一個整型指標陣列

c語言結構指標和結構體成員指標問題

佼霏聞新竹 既是取地址符號,一個指標p指向q就需要寫作p q,在函式引數裡是 引用 就是別名,類似指標了,這種情況下對變數的修改會影響到函式外的原變數。那個printf a p n a 等於求出地址 x然後作為指標看待 p 所以也是yyyy了 樓主可以做個試驗,看看輸出結果地址間的關係,你就應該可以...

c語言指標與陣列問題,c語言陣列與指標相關問題,謝謝

這個問題關鍵在於理解指標為什麼要有型別。其實不同型別的指標本質上都是一樣的,即記憶體地址,地址本身是沒有型別的,賦予指標型別的意義在於給出儲存資料的位元組寬度,也稱資料對齊寬度。比如 int pt,pt是一個整數指標,那麼編譯器便知道如果通過pt讀取資料時需要一次讀取4位元組,因為那裡存放著一個in...

C語言中連結串列中的結構體指標變數問題求教

定義結構體指標變數時,只分配儲存指標型別需要的空間,比如listnode p 這裡p有給他分配儲存指標的4個位元組的空間。實際上你是要讓p指向一個結構體空間的,這個結構體空間在哪?可以先定義listnode a 然後 p a 這時p指向一個之前申請分配過空間 編譯器設定過其地址和大小,在棧空間存放著...