❶ c語言,數組首地址的地址和首地址的內容居然是一樣的,看懂了就進來看看吧
理解這個很重要,當你理解之後你就會發現設計C語言的大師們是多麼的聰明,這些設計非常利於C語言書寫的簡潔
a與&a都是指針,指針有兩個要素
第一個是地址值,也就指向的位置,你列印出來的就是地址值,a與&a的地址值是一樣的
第二個是類型(所指向的數據類型),a指向數組第一個元素,&a指向數組a,a+1後的地址值會偏移一個元素的長度,&a+1後的地址值會便宜一整個數組的長度,所以a與&a類型是不一樣的
關於指針與數組的關系,理解之後對你寫代碼質量會有很大的幫助,當然一開始理解起來會有難度,有一句話說的好:在C語言中只有一維數組(N維數組的元素是數組),數組名作為指針時永遠指向第一個元素,如
數組a[3] ,*a = a[0],
數組a[3][4], *a = a[0],只不過這時候a[0]又是一個數組,這時候a[0]又是指向它自己元素的第一個元素,又有*a[0] = a[0][0].
這種方式可以推廣到N維數組,所有數組直接對數組名取地址(如&a)得到的指針指向該數組,而不是指向第一個元素,注意這點區別哦,理解了我上面所說的,就知道了
還有對你的疑問說說我的看法
「arr表示的是數組的首地址」:沒錯,arr就是指向第一個元素的指針
"&arr表示的是數組的首地址的地址":這句話不對,我更傾向於把&arr理解為指向數組arr的指針
「arr相當於一個指針, 我現在直接用printf輸出arr相當於輸出了arr中儲存的內容(不是輸出以該內容為地址的變數),其結果居然與arr的地址是相同的,這怎麼可能。」:
arr只是一個符號,本身不是變數不存在存儲內容的說法
❷ 到底什麼是「數組的首地址」剛學C,不太懂
其實就是數組的第一個元素的地址,比如說數組a[10],它的首元素就是a[0]。如果作為
實參
傳入的話就是a[0]在內存中的地址。可以用指針來接收。
❸ C語言中,數組在內存中佔一片()的存儲區,由()代表它的首地址。
數組在內存中佔一片(連續)的存儲區,由(首元素的地址)代表它的首地址
數組名是一個(指針)常量,不能對它進行賦值運算
❹ c語言中什麼叫首地址,希望詳細點,最好有例舉!!!
「首地址」一詞不是C語言里的術語。是計算機原理裡面的概念。
計算機存儲器(主要指內存儲器)的每個單元都有一個編號,稱作地址,CPU就是靠這個編號——地址來訪問(即讀、寫)每個單元。
而程序中的變數,有些需要不止一個單元來存放。例如C語言中的long型變數,通常都是32位二進制數,在每個單元都是8位的計算機存儲器中,需要4個單元才能存放一個long型的數。
為了便於訪問,一個變數所佔用的這幾個單元通常都連續存放,也就是說,佔用地址連續的幾個單元。地址連續的幾個單元通常就叫做一個「存儲區域」。
這樣說,就該明白什麼叫「首地址」了吧?就是該變數所佔的存儲區域中的第一個單元的地址。
❺ C語言中數組名就是數組的首地址,怎麼解釋哥們菜鳥
這個數組名是a
a就相當於指針,存的是數組的首地址
1 #include<stdio.h>
2 int main()
3 {
4 int a[3][20];
5 printf("%p",a);
6 }
可以列印出a的地址
❻ C語言中,數組的起始地址是什麼
數組變數的起始地址不定。
如定義:
int a[10];
int *p;
p = &a[0];
起始地址可以這樣列印a數組起始地址:printf("address:%x\n', p);
你要知道這個干什麼?
❼ c語言中把數組名作為該數組的什麼即數組中第一個元素的存儲地址
c語言中把數組名作為該數組的首地址,即數組中第一個元素的存儲地址。如果有定義int a[10],*p;
則以下三個語句的作用是完全相同的:
p=a;
p=&a[0];
p=&a;