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