C語言中指標的幾點注意

2021-08-27 15:31:42 字數 1919 閱讀 7099

最近在看《c語言深度剖析》,發現裡面的東西還是挺有用的,特別是以前腦海中c語言中一些不清晰的部分作者都一一指出了,對與深入學習c和找工作方面都有幫助。

今天要記錄一些指標方面的東西,包括陣列名和陣列名的位址,指標陣列和陣列指標,函式指標的用法。

首先看一段**:

#include int main()

; printf("sizeof(a):%d\nsizeof(&a):%d\nsizeof(&a[0]):%d\n",sizeof(a),sizeof(&a),sizeof(&a[0]));

printf("a:0x%x\n&a:0x%x\n&a[0]:0x%x\n",a,&a,&a[0]);

return 1;

}

編譯執行結果:

感覺還是蠻意外的,因為 a 和&a[0]的值是完全一樣的,都是陣列首元素的位址,而&a感覺其值應當是a的位址,執行結果卻是&a的值表示的也是陣列首元素的位址。

有一句比較拗口的話,你對陣列名取位址當然取到的是陣列的位址,而不幸的是c又規定陣列名的值就是陣列位址。

對於sizeof,首先它不是函式,它是乙個操作符(operator)簡單的說其作用就是返回乙個物件或者型別所佔的記憶體位元組數。

在很多筆試題中都會考到sizeof乙個struct,需要注意記憶體對其。

還有就是sizeof陣列名了,要注意陣列名在sizeof的時候不退化為指標,所以sizeof的是整個陣列的大小,5*4 = 20;

首先看下面兩句:

int *p1[10];

int (*p2)[10];

這倆乙個是指標陣列,乙個是陣列指標,怎麼區分的,答案:看優先順序。

第乙個,[ ]的優先順序比*的優先順序大,所以是申明乙個陣列,這個陣列的資料型別是int *,其含有10個指向int型別資料的指標,所以這是乙個指標陣列。

第二個,括號優先順序最大,所以是定義乙個指標,指標指向的內容是包含10個元素的陣列,所以這是乙個陣列指標,注意,它是乙個二級指標。

看乙個例子:

理解了指標陣列和陣列指標的改面,上面的**也就明了了。

函式指標的含義是乙個指標變數,其指向的值是乙個函式,看下面乙個例子。

#include long factorial(int n) 

return result;

}int main()

3-12行是乙個求 factorial的乙個函式。

16行宣告定義了乙個函式指標,指向factorial函式,注意括號不能省略。

17和18行是呼叫函式指標的兩種方式,效果是一樣的。

19行列印函式指標佔的記憶體空間。

《c語言深度剖析》

c語言函式指標基礎 -

C語言中指標與陣列注意地方

一開始我以為兩個spi data out是沒有區別的。都是指標,乙個是常量,乙個是變數而已。沒有太在意。如果有人單看spi data out 0 這個有問題的話我覺得你c語言跟我一樣差。相對於這兩個指標而言這個陣列操作沒有問題。但問題出在哪呢?就是那一長串的字串。把這些一結合就產生了各種問題 程式跑...

C語言中指標大全

1.使用二維字串儲存字串的時候會出現儲存浪費的情況,使用指標陣列儲存則不會 char s for i 0 ifor i 0 i 3 i 2.指標陣列作為函式引數傳遞多個字串給另乙個函式。指標陣列是乙個陣列,只是裡面存放了指標 void str sort char s,int n n代表指標陣列的長度...

C語言中指標的操作

c語言中指標操作主要有以下幾種 指標減去乙個整數 模擬上面的4。指標自減 模擬上面的5.求差值 通常對指向乙個陣列兩個不同元素的指標求差值,代表兩個元素位置的差值。示例 include int main void int ptr1,ptr2,ptr3 ptr1 urn ptr2 urn 2 prin...