㈠ 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(對象)測出的都是對象自身的類型的大小,而不是別的什麼類型的大小。
㈡ c語言中關於指針和數組的問題
你這個等於說就是p1依次被賦值為「you failed」和 「you passed」中的字元。你這應該是51單片機吧。
數組和指針關系:
其實數組的名就是一個指針,只不過是一個常量指針比如pass可以當做指針,因為他指向了一個地址×pass就是m1這個指針的地址
㈢ C語言指針和數組的關系
指針和數組是兩種不同的數據結構:
指針:邏輯結構是:長整型的類型,表示的是內存地址,它只能存放內存位元組的編號,它的意義是表示某個位元組在內存中的編號.物理結構是:佔四個位元組的一個長整型內存空間.特點是:它保存內存地址的編號.
數組:邏輯結構是:由多個並列關系的元素構成,各數組元素之間的地位是平等的.物理結構是:存儲在一塊連續的內存空間,邏輯相鄰的元素存放在相鄰的物理單元內.特點是:數組名稱同時表示該塊內存空間的起始地址,數組元素可以定義為任何數據類型.
㈣ C語言:簡述一下「數組和指針的關系」
一、概念
數組:數組是用於儲存多個相同類型數據的集合。
指針:指針相當於一個變數,但是它和不同變數不一樣,它存放的是其它變數在內存中的地址。
數組:數組在內存中是連續存放的,開辟一塊連續的內存空間。數組是根據數組的下進行訪問的,多維數組在內存中是按照一維數組存儲的,只是在邏輯上是多維的。
指針:指針很靈活,它可以指向任意類型的數據。指針的類型說明了它所指向地址空間的內存。
數組:
指針:
數組:
- (1)char a[]={"Hello"};//按字元串初始化,大小為6.(2)char b[]={'H','e','l','l'};//按字元初始化(錯誤,輸出時將會亂碼,沒有結束符)(3)char c[]={'H','e','l','l','o','
二、賦值、存儲方式、求sizeof、初始化等
1.賦值
同類型指針變數可以相互賦值,數組不行,只能一個一個元素的賦值或拷貝
2.存儲方式
數組的存儲空間,不是在靜態區就是在棧上。
指針:由於指針本身就是一個變數,再加上它所存放的也是變數,所以指針的存儲空間不能確定。
3.求sizeof
數組所佔存儲空間的內存:sizeof(數組名)
數組的大小:sizeof(數組名)/sizeof(數據類型)
在32位平台下,無論指針的類型是什麼,sizeof(指針名)都是4,在64位平台下,無論指針的類型是什麼,sizeof(指針名)都是8。
關於指針和數組求sizeof,我在之前的博客中寫過,現將連接貼上:
https://blog.csdn.net/cherrydreamsover/article/details/81589838
4.初始化