今天偶然間看到乙個問題,於是乎去學習了下,記錄一下對陣列名的乙個知識點。
陣列名:是指標常量。
出錯**:
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...