就是"變數空間" 的首位址
定義型別* 變數名;
注:指標變數分配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...