陣列:是一組相同型別元素的集合
一維陣列 :type arr_name [size]
陣列建立:
int arr1[10]
;int count =10;
int arr2[count]
;
陣列的初始化是指:在建立陣列的同時給陣列的內容一些合理初始值(初始化)。
int arr2=
;int arr3[5]
=;char arr4[3]
=;char arr5=
;char arr6=
"abcdef"
;
1、陣列能整體被初始化,不能整體賦值2、必須把陣列當做整體看,開闢空間時陣列整體開闢,整體釋放,陣列在記憶體當中一定連續存放(線性儲存)
3、陣列訪問可以通過下標和陣列訪問。
int arr[10]
=;//陣列的不完全初始化(陣列中的元素被全部初始化為0)
//計算陣列的元素個數
int sz =
sizeof
(arr)
/sizeof
(arr[0]
);//對陣列內容賦值,陣列是使用下標來訪問的,下標從0開始。所以:
int i =0;
//做下標
for(i=
0; i<
10; i++
)//這裡寫10,好不好?
//輸出陣列的內容
for(i=
0; i<10;
++i)
二維陣列:
//陣列建立
int arr[3]
[4];
char arr[3]
[5];
double arr[2][4]
//陣列初始化
int arr[3]
[4]=
;int arr[3]
[4]=
,};int arr[
4]=,
};
//訪問二維陣列中的元素
int arr[3]
[4]=
;int i =0;
for(i=
0; i<
3; i++)}
//遍歷陣列中的元素
for(i=
0; i<
3; i++
)}
1、二維陣列在位址中也是連續存放
2、可以看做一維陣列,陣列裡面的元素為一維陣列。
一般情況下為陣列的首元素位址
特例:1. sizeof(陣列名),計算整個陣列的大小,sizeof內部單獨放一 個陣列名,陣列名表示整個陣列。
2. &陣列名,取出的是陣列的位址。&陣列名,陣列名表示整個陣列。
陣列作為函式引數時會降維,降維其指向其內部元素型別(可能是 double ,float,int ,陣列,指標)的指標。
void
test
(int a)
intmain()
;printf
("%d\n"
,sizeof
(a))
;test
(a);
system
("pause");
return0;
}
執行結果:
指標:在電腦科學中,指標(pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為「指標」。意思是通過它能找到以它為位址的記憶體單元。
通俗來講指標是個變數,存放位址
int a =10;
//在記憶體中開闢一塊空間
int*p =
&a;//這裡我們對變數a,取出它的位址,可以使用&操作符。
//將a的位址存放在p變數中,p就是乙個之指標變數。
指標是用來存放位址的,位址是唯一標示一塊位址空間的。
指標的大小在32位平台是4個位元組,在64位平台是8個位元組。
int a=10;
int*p =
&a;//
printf
("%d"
,*p)
;//對指標解引用,指向其所指向的目標
野指標:就是指標指向的位置是不可知的(隨機的、不正確的、沒有明確限制的)
出現野指標的原因:
//指標未被初始化
int*p;
//區域性變數指標未初始化,預設為隨機值
*p =20;
return
0;
//指標訪問越界
int arr[10]
=;int*p = arr;
int i =0;
for(i=
0; i<=
11; i++
)return
0;
如何規避野指標
指標初始化
小心指標越界
指標指向空間釋放即使置null
指標使用之前檢查有效性
指標±整數:對指標加一是加上指標所指向型別的大小==>(指標加上sizeof(type))
指標-指標:表示兩指標之間所經歷的元素(元素的型別由指標決定)的個數,指向同一塊記憶體才有意義,常用統一字串、陣列。
指標的型別:
1、決定了指標向前或者向後走一步有多大(距離)。
2、對指標解引用的時候有多大的許可權(能操作幾個位元組)。 比如: char* 的指標解引用就只能訪問乙個位元組,而 int* 的指標的解引用就能訪問四個位元組。
深度解析陣列名與指標的區別
最近經常遇到sizeof 運算子在計算陣列大小出錯的問題,究其原因還是學藝不精,廢話不多說,上 首先看下面這段 include using namespace std void fun1 int p void foo int i 但是,常量變成變數,只是值的傳遞,其內涵和位址還是丟失了,於是fun2...
指標陣列與陣列指標 go解析
對於指標陣列和陣列指標在c或c 中也經常被討論,尤其對於初學者來說會分辨不清楚。其實在每個詞中間新增乙個 的 就很好理解了,指標的陣列,陣列的指標。本文就通過go語言來分別解釋一下陣列指標與指標陣列。對於指標陣列來說,就是 乙個陣列裡面裝的都是指標,在go語言中陣列預設是值傳遞的,所以如果我們在函式...
陣列指標解析
題目 最近看到一道模擬題,題目如下 include include include include includeusing namespace std int main int p 3 p n cout p 0 0 p 0 1 p 2 endl cout p 3 endl cout p 1 1 e...