陣列名與指標變數

2021-07-11 13:45:22 字數 901 閱讀 6392

今天偶然間看到乙個問題,於是乎去學習了下,記錄一下對陣列名的乙個知識點。

陣列名:是指標常量。

出錯**:

int aa[10] = ;

int num = 0;

for(num = 0; num < 10; num ++)

int *bb = (int *)malloc(40);

memset((void *)bb, 0, 40);

for(num = 0; num < 10; num ++)

編譯就無法通過:error: lvalue required as increment operand

正確**:

for(num = 0; num < 10; num ++)

原因:aa 陣列名是指標常量,不可以進行自加運算。

延伸拓展:

(1) 陣列名表示的就是一種資料結構,就是陣列;

(2) 陣列名可以轉換成乙個指標常量;

(3) 指向陣列的指標則是指標變數,存放著的是陣列的位址!

下面又出現乙個問題:

void arraytest(char str)

int main()

列印結果為4(32位系統)/8(64位系統)。

原因分析 :當陣列名作為形參傳入時候,只是乙個指標變數了,可以做自增、自減操作。

形參char str等同於char *str

補充說明:對於乙個指標來說,char *aa = (char *)malloc(10);

以下運算合法,與aa是不是陣列無關。

*(aa + n) = aa[n];  (n < 10)

還有一點需要說明:

對於上面例子中的bb指標來說,不需要做free(bb)操作,因為aa在結束時候會被乾掉,bb要是free的話會造成二次free,這樣就報錯了。

陣列名與指標

引言 指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的開發,而身邊...

陣列名與指標

include using namespace std int main int b 2 10 陣列名本身就是指標,再加上 就變成了雙指標,這裡的雙指標的就是指二維陣列 int p int a 1 p指向a陣列的第6個元素 雖然不存在 cout p 1 cout b 1 cout b 0 retur...

陣列名與指標

在本科畢業前,一直以為陣列名就是指標,但是最近看了一些技術文章和與一些技術大佬的討論,我開始迷茫了,在心裡一直有疑問,在本科寫程式的時候一直就拿陣列名當指標用啊,沒什麼問題啊,但是後來想了想,有了點靈感,就寫下來,不知道自己琢磨的是否通透,歡迎交流學習。首先說明陣列名為什麼不是指標 上例子 incl...