當前位置:首頁 » 編程語言 » c語言數組名和指針名
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言數組名和指針名

發布時間: 2022-07-22 06:00:17

1. 求助c語言關於數組名和指針的問題

如圖,a是數組第一個元素的地址值,一個指針,一般佔用4個位元組內存大小,p也是個指針,也佔用4個位元組,兩個都是變數,因為賦值,兩個存放的值都一樣了,但是本身不一樣,就想兩個紙條寫的都是同一個地址。

2. c語言中怎樣理解數組和指針

數組和指針的關系

一、數組的數組名其實可以看作一個指針。看下例:

例1:

int array[10]={0,1,2,3,4,5,6,7,8,9},value;

value=array[0];//也可寫成:value=*array;

value=array[3];//也可寫成:value=*(array+3);

value=array[4];//也可寫成:value=*(array+4);

上例中,一般而言數組名array代表數組本身,類型是int [10],但如果把array看做指針的話,它指向數組的第0個單元,類型是int *,所指向的類型是數組單元的類型即int。因此*array等於0就一點也不奇怪了。同理,array+3是一個指向數組第3個單元的指針,所以*(array+3)等於3。其它依此類推。

二、指針數組的定義及使用

例2:

char *str[3]={ //注意指針數組的定義及初始化格式

"Hello,this is a sample!",

"Hi,good morning.",

"Hello world"

};

char s[80];

strcpy(s,str[0]);//也可寫成strcpy(s,*str);

strcpy(s,str[1]);//也可寫成strcpy(s,*(str+1));

strcpy(s,str[2]);//也可寫成strcpy(s,*(str+2));

上例中,str是一個三單元的數組,該數組的每個單元都是一個指針,這些指針各指向一個字元串。把指針數組名str當作一個指針的話,它指向數組的第0號單元,它的類型是char**,它指向的類型是char *。
*str也是一個指針,它的類型是char*,它所指向的類型是char,它指向的地址是字元串"Hello,this is a sample!"的第一個字元的地址,即'H'的地址。 str+1也是一個指針,它指向數組的第1號單元,它的類型是char**,它指向的類型是char *。

*(str+1)也是一個指針,它的類型是char*,它所指向的類型是char,它指向"Hi,good morning."的第一個字元'H',等等。

三、數組名小結:
聲明了一個數組TYPE array[n],則數組名稱array就有了兩重含義:第一,它代表整個數組,它的類型是TYPE [n];第二,它是一個指針,該指針的類型是TYPE*,該指針指向的類型是TYPE,也就是數組單元的類型,該指針指向的內存區就是數組第0號單元,該指針自己佔有單獨的內存區,注意它和數組第0號單元占據的內存區是不同的。該指針的值是不能修改的,即類似array++的表達式是錯誤的。

在不同的表達式中數組名array可以扮演不同的角色。

(1)在表達式sizeof(array)中,數組名array代表數組本身,故這時sizeof函數測出的是整個數組的大小。

(2)在表達式*array中,array扮演的是指針,因此這個表達式的結果就是數組第0號單元的值。sizeof(*array)測出的是數組單元的大小。

(3)表達式array+n(其中n=0,1,2,....。)中,array扮演的是指針,故array+n的結果是一個指針,它的類型是TYPE*,它指向的類型是TYPE,它指向數組第n號單元。故sizeof(array+n)測出的是指針類型的大小。

四、數組指針的定義及使用:

例3:

int array[10];

int (*ptr)[10]; //數組指針ptr,指向一個數組int[10]

ptr=&array;

上例中ptr是一個指針,它的類型是int (*)[10],他指向的類型是int [10],我們用整個數組的首地址來初始化它。在語句ptr=&array中,array代表數組本身。

五、對指針和數組執行sizeof操作的結果:
sizeof(指針名稱)測出的究竟是指針自身類型的大小呢還是指針所指向的類型的大小?答案是前者。例如:

int (*ptr)[10];

則在32位程序中,有:

sizeof(int(*)[10])==4

sizeof(int [10])==40

sizeof(ptr)==4

實際上,sizeof(對象)測出的都是對象自身的類型的大小,而不是別的什麼類型的大小。

3. 分析C語言中數組名和指針的區別

數組名指向數組的首地址,相當於地址常量,只能做右值。
指針就是指向固定大小內存的地址,又分指針變數和指針常量。
所以數組名也屬於指針。

4. C語言中數組名和指針的區別 及 sizeof用法

指針需要給一個明確的指向才能使用,否則就是一個野指針。
數組名就是一個有明確指向的指針。
數組名有點類似於const指針。比如:
int a[10]={0};
a就類似於const int * p = a;
另外,指針的sizeof就是4位元組(視系統而定,一般4位元組);數組名的sizeof就是這個數組的整個size。
比如:sizeof(p) = 4; sizeof(a) = 10*sizeof(int);

5. c語言中的數組和指針的區別

C語言中,數組的名稱等價於數組的首地址,
當然可以利用指針開辟動態空間,使用方式與數組在形式上相同的,
但是他們有一個本質的區別,數組名相當於一個地址常數,而指針是一個以地址為內容的變數。
指針與數組的關系可以參考下面的網頁:
http://..com/question/341950481.html

6. c語言中數組和指針的區別與聯系

數組是用指針方式實現的,但數組值是一個常量,即不能改變數組的首地址,而指針是一個變數,可以改變它的值;如:數組 a和指針p,p=a+1;是合法的,但a=a+1;是不合法的。

7. c語言數組名與指針的關系

數組名是不可移動的指針,指針是移動的數組名。

8. c語言中數組名和指針變數的區別

數組和指針的區別:
數組名確實表示指向數組首地址的指針,但這個指針很特別,它的值(指針的值指的是指針所指的地址)不能被改寫,能改寫的僅僅是其指向的內容,換句話說,數組名只能指向數組的首地址,如果有數組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」

9. C語言中數組名和指針的區別

數組在當作參數傳遞時,可以當作指針;當然,參數傳遞相當於賦值操作,所以用指針來接受數組的值也是可以的。

除此之外,指針就是指針,數組就是數組,一點也不一樣,例如
1,數組名不能作為左值,即不能被賦值,也不能進行++ --操作
2,sizeof 數組名 和 sizeof 指針 不同