一、數(shù)組和指針的介紹
指針是一個(gè)變量,它存儲(chǔ)了一個(gè)內(nèi)存地址,該地址指向一個(gè)變量的存儲(chǔ)位置。通過指針,可以訪問和修改指向的變量。數(shù)組是一個(gè)由相同數(shù)據(jù)類型元素組成的集合,可以通過索引來訪問和修改這些元素。
二、兩者之間的區(qū)別
1,存儲(chǔ)方式
數(shù)組:數(shù)組在內(nèi)存中是連續(xù)存放的,開辟一塊連續(xù)的內(nèi)存空間。數(shù)組是根據(jù)數(shù)組的下進(jìn)行訪問的,數(shù)組的存儲(chǔ)空間,不是在靜態(tài)區(qū)就是在棧上。
指針:指針很靈活,它可以指向任意類型的數(shù)據(jù)。
指針p存儲(chǔ)的是一個(gè)內(nèi)存地址,這個(gè)地址指向的是某種類型變量的存儲(chǔ)空間。如果要訪問這個(gè)變量,需要使用指針運(yùn)算符(*)來解引用指針,將指針?biāo)赶虻牡刂忿D(zhuǎn)換為所指向的變量的值。指針的值也可以改變,通過指針運(yùn)算符(&)獲取變量的地址,然后將其賦給指針變量。
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //
int a = 10;
int* p = &arr[0]; // 數(shù)組下標(biāo)訪問第一個(gè)元素,取地址后是第一個(gè)元素的地址
//int* p = arr; // 跟上面這行是等價(jià)的,數(shù)組名表示這個(gè)數(shù)組第一個(gè)數(shù)據(jù)的指針,此時(shí)數(shù)組和指針是“通用的”
p = &a; // 指向a變量的地址,此時(shí) *p取到的值就是a變量的值
2,賦值方式
同類型指針變量可以相互賦值,數(shù)組不行,只能一個(gè)一個(gè)元素的賦值或拷貝
3,占用空間大小
數(shù)組的大小取決于數(shù)組元素的類型和元素個(gè)數(shù)
數(shù)組所占存儲(chǔ)空間的內(nèi)存:sizeof(數(shù)組名)
數(shù)組的大小:sizeof(數(shù)組名)/sizeof(數(shù)據(jù)類型)
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 占40個(gè)字節(jié)
int* p = arr; // 占4個(gè)字節(jié)(32位系統(tǒng))
char c = 'A';
char* p2 = &c; // 占4個(gè)字節(jié)(32位系統(tǒng))
指針無論是什么類型,在32位平臺(tái)是占4 byte,在64位平臺(tái)是占8 byte
4, 可變性
數(shù)組的大小在定義時(shí)就已經(jīng)確定,無法改變,而指針可以隨時(shí)指向不同的變量,從而實(shí)現(xiàn)動(dòng)態(tài)變化。
三、數(shù)組指針和指針數(shù)組的區(qū)別
指針數(shù)組 :首先是一個(gè)數(shù)組,只不過數(shù)組的每個(gè)成員是一個(gè)指針變量。
數(shù)組指針 :首先是一個(gè)指針,這個(gè)指針指向一個(gè)數(shù)組。
代碼:
int *p1[10]; // 指針數(shù)組,[]的優(yōu)先級(jí)大于*,p1是一個(gè)數(shù)組,數(shù)組的值是一個(gè)指針
int (*p2)[10]; // 數(shù)組指針
對(duì)于指針數(shù)組,p1先和“[]”結(jié)合,構(gòu)成一個(gè)數(shù)組的定義,數(shù)組名為p1,int *修飾的是數(shù)組的內(nèi)容,即數(shù)組的每個(gè)元素。那么它本質(zhì)是一個(gè)數(shù)組,這個(gè)數(shù)組里有10個(gè)指向int類型數(shù)據(jù)的指針。
對(duì)于數(shù)組指針,“()”的優(yōu)先級(jí)比“[]”高,“*”和p2 構(gòu)成一個(gè)指針的定義,指針變量名為p2,int 修飾的是數(shù)組的內(nèi)容,即數(shù)組的每個(gè)元素。數(shù)組在這里并沒有名字,是個(gè)匿名數(shù)組。那么它本質(zhì)是一個(gè)指針,它指向一個(gè)包含10個(gè)int 類型數(shù)據(jù)的數(shù)組。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7637瀏覽量
166528 -
C語言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140552
發(fā)布評(píng)論請(qǐng)先 登錄
C語言數(shù)組和指針的區(qū)別

C語言中指針數(shù)組和數(shù)組指針的區(qū)別
C語言——指針、數(shù)組和函數(shù)
C51語言的指針、結(jié)構(gòu)、聯(lián)合和枚舉
c語言函數(shù)指針定義,指針函數(shù)和函數(shù)指針的區(qū)別
指針和數(shù)組都是C語言的精髓所在 兩者有何聯(lián)系區(qū)別

評(píng)論