C語言從新學習——數組與指針的關係

一、一維數組與指針
數組聲明爲int a[10];其中a被稱爲數組標識,能夠看做是整個數組的指針,其指向的是數組的開頭,如圖所示。其中*numbers指向的是numbers[0],其中輸入第一個數numbers[0]能夠直接使用scanf("%d", numbers);不需使用&符號。
數組與指針的關係:
*numbers=numbers[0];   *(numbers+n)=number[n];    numbers+n = &(numbers[n]);

數組賦值若是小於長度,則數值型補0,字符型補'',字符串型補"\0",大於的話會報編譯錯誤。web


二、多維數組與指針
二維數組與指針的對應關係爲a[n][m]=*(*(a+n)+m)
多維數組對應關係:
多維數組賦初值規律:
從最底層開始,除了最大的括號外,每遇一個‘{’則下一級,每遇一個‘,’右移一級,遇'}'則未賦值的略去。
例:int a[3][3][3]={{{1,2,3,4},1,2,3},{5,6,7,8}};

先爲最大的括號,略去,而後遇到兩個大括號,則從a[0][0]開始賦值賦值4個,即a[0][0][0]=1,a[0][0][1]=2,a[0][0][2]=3,a[0][1][0]=4,此時捨去a[0][1],從a[0][2]開始賦值,即a[0][2][0]=1,a[0][2][1]=2,a[0][2][2]=3。而後賦值a[1],賦值4個a[1][0][0]=5,a[1][0][1]=6,a[1][0][2]=7,a[1][1][0]=8,剩下的爲0,這樣賦值就完成了。數組


三、sizeof與數組和指針
sizeof是計算某個符號所佔字節數的關鍵字,計算主要以malloc分配的空間爲主,單純的變量與其指針的大小是同樣的,但數組卻隨着指針層數的不一樣而發生變化。
N維數組a[n1][n2]...[nn]的sizeof爲n1*n2*...*nn*sizeof(a[0][0]...[0](n個))=n1*n2*...*nn-1*sizeof(a[0][0]...[0](n-1個))=...=n1*sizeof(a[0])=sizeof(a)
=n1*sizeof(*a)=n1*n2*sizeof(**a)=...=n1*n2*...*nn*(**..*a);
相關文章
相關標籤/搜索