C語言 指標詳解1

2021-08-28 03:18:20 字數 3527 閱讀 1529

一,指標

1.位址

記憶體單元的編號叫位址;

2.指標

記憶體單元的位址叫指標;

變數的位址叫指標;

3.指標變數

儲存變數位址的變數叫指標變數;

說明:在不作

區分的情況下,將位址指標指標變數統稱指標;

4.指標變數的形式

儲存型別資料型別*指標變數名;

例如:int * p;

說明:儲存型別:同普通變數,指標變數本身的儲存型別;

資料型別:既可以是基本型別,也可以是struct,也可以是void,還可以是指標;

此資料型別是指標指向空間內容的資料型別;(重點)

*:表示變數為指標變數;

指標變數名:符合命名規則;

指標變數的初始化

儲存型別資料型別*指標變數名=位址值; eg1

:int i = 10;

int * p =&i; //由於p指標指向的資料為int型,所以需要給指標變數putr int型變數的位址; eg2

:char ch ='a';

char * q =&ch;

6.&與*

&:取變數的位址

*:1>在定義指標變數時,*用來說明定義的變數為指標變數;

例如:float * p; // *說明定義的變數p為指標變數;

2>在定義之後,指標變數名前加*,含義是取指標指向空間的值;(解引用)

例如:int i = 10;

int * p;

p =&i; //給指標變數p賦i的位址

printf(「i =%d * p =%d \ n」,i,* p);

注意:&與*互為逆運算;

例如:int i = 10;

的printf(」

7.指標的運算

本質:位址的運算

定義指標變數px和py;

1>算數運算:(+ - ++ - )

px + n:指標向位址大的方向偏移n個資料型別;(此資料型別為指標指向內容的資料型別)

px-n:指標向位址小的方向偏移n個資料型別;(此資料型別為指標指向內容的資料型別)

px ++://等價:px = px + 1;指標向位址大的方向移動1個資料型別;(此資料型別為指標指向內容的資料型別)

px--:指標向位址小的方向移動1個資料型別;(此資料型別為指標指向內容的資料型別

)px-py:兩指標之間相差的資料型別的個

數; 例如:

int a [10] = ;

int * p =&a [0]; //

int * q =&a [7];

printf(「p =%p p + 3 =%p \ n」,p,p + 3); // p = 0xbffb8334 p + 3 = 0xbffb8340

printf(「q =%p q-3 =%p \ n」 ,q,q-3); // q = 0xbffb8350 q-3 = 0xbffb8344

printf(「qp =%d \ n」,qp); // qp = 7

注意:n為整數

2>關係運算(> <> = <= ==!=)

eg1:

int * p; //「野指標「

* p = 10; //不允許通過野指標訪問野指標指向的空間; eg2

:int * p = null; // stdio.h定義的巨集值#define null 0

if(null == p)/ /判斷指標是否為有效的指標

* p = 10; //錯誤

3>賦值運算eg1

:int i = 10;

int * p =&i;

eg2:

int i = 10;

int * q = p;

eg3:

int a [10];

int * p = a;

二,指標與陣列

通過指標運算元組;

1,一級指標與一維陣列

例如:int a [10] = ;

int * p = a; // int * p =&a [0];

int i;

for(i = 0; i <10; i ++)

printf(「%d」,a [i]);

的printf( 「\ n」);

for(i = 0; i <10; i ++)

printf(「%d」,p [i]);

printf(「\ n」);

結論:1>

陣列中第i個元素的表示:(i = 0,1,2,.....)

a [i] p [i] *(a + i) *(p + i)*(&a [i])*(&p [i])

2>

&a [i]&p [i](a + i)(p + i)         

三,字元

指標1.形式

儲存型別char *指標變數名; eg1

:char ch ='a';

char * p =&ch; //

* p ='b';

的printf( 「* p =%c \ n」,* p);

eg2:

字元指標操作字串(重點)

char * p =「hello world」; //將字串的首位址賦予p指標

printf(「* p =%c \ n」,* p); // * p ='h'

* p ='a'; // error不能通過指標修改常量區的東西

例子:char * p;

p =「你好世界」;

printf(「* p =%c \ n」,* p); // * p ='

h'printf(「p =%s \ n」,p);

char * p = null;

p =「你好世界」;

eg4:

char ch [20] =「hello world」;(√)

char ch1 [20];

ch1 =「hello world」;(×)//陣列名不能作為左值

eg5:

char ch1 [20];

ch1 [20] =「hello world」;(×)// ch1 [20]表示的是陣列ch1中的第21個元素,越界

eg6:

char ch [20] =「hello world」; //將常量區的「hello world」拷貝貝份到ch的空間

* ch ='a';

printf(「%s \ n」,ch); //結果:aello world

例項:1,求乙個字串的長度。(指標) 

的#include 中

int main()

printf("num=%d\n",num);

return 0;

}2、計算乙個字串的空格數,並刪除全部空格;

#include

int main()

}printf("num=%d %s\n",num, a);

return 0;

}3、用指標給乙個陣列賦值,並列印。

#include

int main()

c語言指標詳解

一.指標的概念 指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。1.指標的型別 從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部...

C語言指標詳解

類似於 int p char p 或者自定義型別的 person p struct p 這些都是基本的指標變數,不管什麼型別的指標變數都是乙個存位址的變數,所以它們的大小都是四個位元組 還有一種void p 型別,類似於 js 或者 c 的 var 可以傳入任何型別變數的位址,也可以轉換成任何型別變...

C語言指標詳解

c語言指標應用 一 指標是什麼 指標是乙個特殊的變數,它存的是記憶體裡的乙個位址。指標四要素 1.指標的型別 把指標名字去掉,剩下的部分就是這個指標的型別。這是指標本身所具有的型別如下 1 int p 指標的型別是int 2 char p 指標的型別是char 3 int p 指標的型別是int 4...