數組名是數組的什麼?
字符串數組名代表什麼
答對了。
其實任何變量的名稱代表的都是變量地址,這點學校和教科書不會說的。
舉例
int a,b=10;
a=b;
將b賦值給a的操作細節是:
取a和b的地址(直接尋址)
取將b地址中的值
複製保存到a的地址中。
對於普通變量(單個變量),包括指針變量,編譯器遇到賦值運算會自動取值,這叫隱式轉換。
而對於數組,如果只給出數組名,編譯器不會直接取第一個元素,因為它無法確定你要取第幾個元素,因此編譯器不會自動處理(取值),返回的就是數組名的地址,也就是第一個元素的地址。
而只有當你指定一個索引,才相當於普通變量的取值,而取值過程是:
先取數組地址,在利用索引計算元素位置,然後取值。
因此對於數組a,使用數組名時, int *p=&a 和 int *p=a效果是一樣的,前者是顯式訪問,後者是隱式訪問。
C++難,我覺得不僅僅是難在指針上,而是很多隱含的自動轉換,因為很多隱式轉換不同編譯器處理不同,所以讓很多初學者很頭痛。
C語言中數組名代表什麼,數組元素用什麼方法表示?
數組名即數組首地址,是一個常量。 數組元素使用"[ n ]"運算符(下標運算符)來表示第n+1號元素,或者使用“ *(p+n) ”來表示第n+1號元素。 數組元素對於編譯器來說 ,在支持快速下標運算的處理器上,a[n]是直接是被轉化成彙編代碼,不支持的被轉化為*(a+n)。這也是老的C程序會在大多數情況下不使用下標運算符的原因。
數組名和數組元素名的區別?
帶下標的是數組元素名,不帶的就是數組名.如定義一個數組int a[3]={1,2,3};
在下面的程序裡使用時,出現a,和a[1],則a是數組名,而後一個則是數組元素戶,它的值是2
c語言中數組名及數組元素名有何區別?
1 數組是一種自定義的數據類型,數組是一些相同類型的對象的集合,方便做循環操作,方便編程。
2 聲明數組的時候要明確以下三點:1.確定數組名稱;2.確定數組元素的類型;
int a[] = {1,2,3}
其中數組名稱a:數組名是一個常量,代表著數組元素集合在內存存儲的起始地址,不能進行自增自減運算。
數組元素:int a[0] = 1,int a[1] =2 ,int a[2] = 3.數組的每一個元素都能看成是一個同類型的變量.
c++數組名錶示數組的首地址,對於字符數組,數組名錶示什麼?
int a[4]={1,2,3,4}; //a表示a[0]的地址
char str[4]="asd"; //str表示 字符串"asd"(非等號後面的“asd”)的首地址,是str[0]的首地址,是'a'的首地址
cout<
str輸出的是整個字符串, cout對於字符串就是這樣處理的,輸出字符串內容
而a輸出的是a[0]的地址 cout對於非字符串,就會輸出數組名所表示的地址值
指針數組的數組名錶示什麼?
.數組和指針的區別:
數組名確實表示指向數組首地址的指針,但這個指針很特別,它的值(指針的值指的是指針所指的地址)不能被改寫,能改寫的僅僅是其指向的內容,換句話說,數組名只能指向數組的首地址,如果有數組char a[];那麼如果出現a = a+1;這是編譯都通不過的錯誤。而對於一個普通的指針是可以的,再比如有數組char a[];那麼再定義一個char *p = a;然後再用p = p+1是合法的,這表示讓指針p指向&a[1]。
它們的第二個區別是:每當用到數組名這個指針的時候,系統都會傳入數組的信息,而普通的指針只是一個4字節的整數,例如:
char a[5];
char *p = a;//指針a和指針p都指向數組a的首地址
cout << sizeof (a) << "##" << sizeof (p) << endl;
這時的運行結果是“5##4”
在C語言中數組名是一個什麼的常量
int a[10]; //a的類型為const int *,是常值整型指針,不能改變a的值。
C語言問題高手來回答。字符串數組名代表的是什麼? 下面的這個字符串數組多餘部分是存什麼?
str等效於&str[0]是個地址,編譯器會認為它是char格式的地址,所以你+1時的確會指向下一個字符地址,實際上str[14] = "ab" 與str[14] ={'a' ,'b'}是一樣的,剩下的就不改變原值,就是該內存段原本的狀態(高級優化),或者聲明時就把全部地址填入0
問題二是錯誤的,至少c語場規範沒有這種語法,str是個地址,也就是int,無法用字符串來賦值
問題三,形參數組是一個指向數組的指針,一個地址而已
求大神::C語言的 &數組名 和 數組名的區別
的概念
指針是一個特殊的變量,它裡面存儲的數值被解釋成為內存裡的一個地址。
要搞清一個指針需要搞清指針的四方面的內容:指針的類型,指針所指向的 類型,指針的值或者叫指針所指向的內存區,還有指針本身所佔據的內存區。讓 我們分別說明。
先聲明幾個指針放著做例子:
例一:
(1)int *ptr;
(2)char *ptr;
(3)int **ptr;
(4)int (*ptr)[3];
(5)int *(*ptr)[4];
1。 指針的類型。
從語法的角度看,你只要把指針聲明語句裡的指針名字去掉,剩下的部分就是這個指針的類型。這是指針本身所具有的類型。讓我們看看例一中各個指針的 類型:
(1)int *ptr; //指針的類型是int *
(2)char *ptr; //指針的類型是char *
(3)int **ptr; //指針的類型是 int **
(4)int (*ptr)[3]; //指針的類型是 int(*)[3]
(5)int *(*ptr)[4]; //指針的類型是 int *(*)[4]
怎麼樣?找出指針的類型的方法是不是很簡單?
2。指針所指向的類型。
當你通過指針來訪問指針所指向的內存區時,指針所指向的類型決定了編譯 器將把那片內存區裡的內容當做什麼來看待。
從語法上看,你只須把指針聲明語句中的指針名字和名字左邊的指針聲明符 *去掉,剩下的就是指針所指向的類型。例如:
(1)int *ptr; //指針所指向的類型是int
(2)char *ptr; //指針所指向的的類型是char
(3)int **ptr; //指針所指向的的類型是 int *
(4)int (*ptr)[3]; //指針所指向的的類型是 int()[3]
(5)int *(*ptr)[4]; //指針所指向的的類型是 int *()[4]
在指針的算術運算中,指針所指向的類型有很大的作用。
指針的類型(即指針本身的類型)和指針所指向的類型是兩個概念。當你對C越 來越熟悉時,你會發現,把與指針攪和在一起的"類型"這個概念分成"指針的 類型"和"指針所指向的類型"兩個概念,是精通指針的關鍵點之一。我看了不 少書,發現有些寫得差的書中,就把指針的這兩個概念攪在一起了,所以看起書來前後矛盾,越看越糊塗。
3。 指針的值,或者叫指針所指向的內存區或地址。
指針的值是指針本身存儲的數值,這個值將被編譯器當作一個地址,而不是一個一般的數值。在32位程序裡,所有類型的指針的值都是一個32位整數,因為32位程序裡內存地址全都是32位長。
指針所指向的內存區就是從指針的值所代表的那個內存地址開始,長度為sizeof(指針所指向的類型)的一片內存區。以後,我們說一個指針的值是XX,就相當於說該指針指向了以XX為首地址的一片內存區域;我們說一個指針指向了某塊
內存區域,就相當於說該指針的值是這塊內存區域的首地址。
指針所指向的內存區和指針所指向的類型是兩個完全不同的概念。在例一中,指針所指向的類型已經有了,但由於指針還未初始化,所以它所指向的內存區是不存在的,或者說是無意義的。
以後,每遇到一個指針,都應該問問:這個指針的類型是什麼?指針指向的類型是什麼?該指針指向了哪裡?
4。 指針本......