一,指標
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...