C語言 指標

2021-09-05 01:35:29 字數 2409 閱讀 3616

就是"變數空間" 的首位址
定義
型別* 變數名;
注:指標變數分配4byte空間

運算子

&變數 //取變數的位址

*位址 //取位址所在空間的內容

指標的運算
指標 +/- 常量;

int *pa;

pa+n;//代表從指向位置向後移動n個元素單位的位址

指標 - 指標;//得到兩個元素位址區間的元素個數

乙個指標的簡單實用例子

int a=100;			//定義整型變數並初始化

int* pa=&a; //定義指標變數並初始化

printf("sizeof(pa)=%d &pa=%x &a=%x\n",sizeof(pa),&pa,&a);

//列印pa所佔位元組數 pa的位址 a的位址

printf("pa=%x\n",pa); //列印pa的內容-----a的位址

printf("%d %d\n",a,*pa); //列印a 的兩種方法

結果圖:

一維指標存放的就是普通變數的位址

利用指標來交換兩數:

void swap(int *pa,int *pb)	//定義交換函式

int main()

int a=10;		//定義a

int *pa=&a; //定義a的指標

int b=20; //定義b

int *pb=&b; //定義b的指標

int c=30; //定義c

int *pc=&c; //定義c的指標

int *p[3]=; //定義指標陣列,存放pa,pb,pc

printf("%x %x %x\n",p[0],p[1],p[2]); //輸出指標陣列的內容

printf("%d %d %d\n",*p[0],*p[1],*p[2]); //輸出指標陣列內容的內容

結果:

陣列的指標:指向陣列的指標

這裡討論二維陣列與指標的關係:

int buf[3][4]=,\

,\}; //定義乙個二維陣列

printf("%d %x\n",buf[0][0],&buf[0][0]); //**二維陣列行與列之間的關係

printf("%d %x\n",buf[1][0],&buf[1][0]); //輸出每行的首元素與其位址

printf("%d %x\n",buf[2][0],&buf[2][0]);

int arr[4]=; //定義乙個以為陣列

printf("%x %x\n",arr,arr+1); //一維陣列的首位址與+1後的位址

printf("%x %x\n",buf,buf+1); //二維陣列的首位址與+1後的位址

int (*p)[4]=buf; //定義二維陣列的指標

//輸出二維陣列的第二行第三列的數

printf("%d %d %d %d\n",*(*(p+1)+2),p[1][2],(*(p+1))[2],*(p[1]+2));

printf("%d %d %d %d\n",*(*(buf+1)+2),buf[1][2],(*(buf+1))[2],*(buf[1]+2));

結果:

對比結果我們可以發現:

以為陣列+1指向下一列,二維陣列+1指向下一行

通過輸出第二行第三列的數,我們可以發現二維陣列與其指標用法一樣

通過2的結論我們可以得到乙個語法糖(特別關鍵

*(p+1) == p[1]

這個結論非常重要,在c語言指標的學習中一直都會遇見

小技巧:由於在記憶體空間中二維陣列是以一維形式存在的,所以我們可以定義乙個一維指標來輸出乙個二維陣列

int buf[5]=,\

,\,\

}; //定義二維陣列

int *p=buf[0]; //定義一維指標指向二維陣列第一行第乙個元素的位址

int len=sizeof(buf)/sizeof(int),i; //求陣列長度

for(i=0;i一定要記住 *(p+1)=p[1]這個語法糖

C語言指標

指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...

C語言指標

1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...

c語言指標

編寫程式,在主函式裡用指標陣列輸入六個字串,再用另乙個函式對這六個字串排序,並在主函式中輸出排好序的字串。include void sort char s,int n char temp for int i 0 ifor int j 0 jif strcmp s j s j 1 0 temp s j...