C指標與陣列學習總結

2021-10-02 20:27:21 字數 3160 閱讀 8200

char stuname ,name;

//定義字元型變數stuname,name

char

*pstu ;

//定義指向字元型變數的指標變數pstu

char

*pnew;

//定義指向字元型變數的指標變數pnew

pstu =

&stuname;

//取變數stuname位址賦值給指標變數pstu

pnew = pstu;

//把指標變數pstu賦值該pnew

name =

*pnew;

//把pnew指向的記憶體單元的值賦給name

2、陣列(存放資料的容器)

陣列元素本身不能被賦值(可以初始化)

如:int ar =;//引用時下標從零開始,0–n-1;

也可以採用遍歷:

for (i=

0; iint a[3][5]; //l理解為乙個三行五列的矩陣

初始化:

int a[3]

[5]=

,,,}

;

或者遍歷:

for(i=

0; i<

3;i++

)}

注:

二、深入理解指標和陣列

1、指標與陣列本質聯絡

陣列中 &a = a = a[0]; 陣列的儲存位址由第乙個儲存單元a[0]的位址確定,這三個式子意思都一樣,表示a[0]的位址。

所以 :

a +2=

=&a[2]

;*(a+2)==

&a[2

];

函式引數表中的陣列實際上就是指標;

sizeof(a)== sizeof(int*);

因此,以下四種函式原型是等價的:

int

sum(

int*ar,

int n)

;int

sum(

int*

,int);

intsum

(int ar,

int n)

;int

sum(

int,

int)

;

所以:

int int a[10];

int *p = a; //無需&操作

運算子可以對陣列做,也可以對指標做:

p[0] 等價於a[0];

*運算子可以對指標做,也可以對陣列做:

*a = 25;

陣列變數是const的指標,所以不能被賦值:

int a 等價於 int *const a;

int

*const q =

&i;//q是const

*q =26;

//ok

q++;//error

//可以這麼理解:指標本身是唯讀的const不能變,而它指向的變數可以變

(2)所指是const:表示不能通過這個指標去修改那個變數:

const

int*p =

&i;*p =26;

//error

i =26

;//ok

p =&j;

//ok

//可以認為*p是const,但指標本身可以變,變數i本身可以變

總結:判斷哪個被const了的標誌是const在*前還是後面

const * --所指的東西不能被修改

*const–指標不能被改變。

三、指標作為函式引數的巧妙用途以下是實踐函式:

/* 指標練習1,指標概念的辨析 */

#include

voidf(

int*p)

;//函式原型,void表示函式沒有返回值,如果是()內的void表示函式不帶引數

voidg(

int k)

;//用來對照指標變數的

intmain

(void

)voidf(

int*p)

voidg(

int k)

/* 指標練習2,指標一些具體的使用 */

#include

void

swap

(int

*pa,

int*pb)

;int

main

(void

)void

swap

(int

*pa,

int*pb)

//使用指標來操作交換函式swap()

/* 指標練習3 ,用乙個函式找出陣列中最大數和最小數 */

#include

void

minmax

(int a,

int len,

int*max,

int*min )

;int

main

(void);

int min, max;

minmax

(a,sizeof

(a)/

sizeof

(a[0])

,&max,

&min)

;printf

("min = %d,max = %d"

,min,max)

;return0;

}/*函式返回多個值時,某些值只能通過指標返回(其實該函式並沒有返回值,

但是通過指標的特性,直接找到所要操作變數的位址,然後改變裡面的值,這裡可以模擬為返回值*/

//傳入的引數實際上是需要儲存的帶結果的變數

void

minmax

(int a,

int len,

int*max,

int*min)

if(a[i]

>

*max)

}}

到此結尾了,我這裡的多為筆記總結,要深入理解還是要自己敲幾行試試。

C語言指標用法總結 指標與陣列

c include intmain int i printf d n a a指向a 0 a 0 int的元素,a的型別就是 int 4,1跨度是4個位元組 printf d n a 1 printf d n a a這個位址指向整個陣列,int 5 1跨度是整個陣列的位元組長度,即20個位元組 pri...

C 指標陣列與陣列指標

說實話,c語言真的很讓人蛋疼,它不像物件導向的語言,我們重心在設計程式上。而使用c語言,你不僅要考慮程式的設計,你還要考慮很多他的使用細節,不然一不小心你怎麼死的都不知道。但是,個人感覺,c語言的魅力是其他任何語言都比不了的!繼續看。陣列指標 範例 typedef int aint5 5 typed...

C 指標陣列與陣列指標

陣列指標 也稱行指標 陣列指標 a pointer to an array,即指向陣列的指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣...