下面介紹指標與陣列的關係
指向一維陣列的指標
指向多維陣列的指標
指向字串的指標
1.指向陣列元素的指標變數的定義方式:型別 *指標變數名
例如:int * p;
2.陣列名的含義:陣列名代表陣列的首位址。
3.指向陣列元素的指標變數的賦值:指標變數= 陣列某一元素的位址(通常是首位址)
例如: int a[10],*p;
p=a;或p = &a[0];
圖示:
指向陣列的指標的加減運算
p++;//p指標移動p所指向型別的位元組,p所指向的是int型陣列,所以p移動兩個位元組指向a[1]
引用乙個陣列有兩種方法:
1.下標法:如a[i]
2.指標法:如*(a+i)或*(p+i)
若有陣列及指標定義 int a[5] ,*p = a;
下標法:a[0] a[1] a[2] a[3] a[4]
指標法:*p *(p+1) *(p+2) *(p+3) *(p+4)
p[0] p[1] p[2] p [3] p[4]
*a *(a+1) *(a+2)*(a+ 3) * (a+4)
通過陣列名計算陣列元素的位址,找出元素的值
main()
int a[10];int i;
for (i = 0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(i = 0 ;i<10;i++)
printf("%d",*(a+i));
用指標變數指向陣列元素:
main()
int a[10];
int *p,i;
for(i = 0 ;i<10;i++)
scanf("%d",p++);
printf("\n");
for(p = a;p
printf("%d",*p);
注:p++合法,但a++不合法(a是陣列名,代表陣列首位址,是常數字址)
要注意指標變數的當前值
p++;(或p+=1;)
p將指向下乙個元素,即a[1].
x = *p++;//不建議使用
*與++是同級運算,等價於先計算*p,為x賦值a[0],再++
*(p++)與*(++p)
*(p++)是先取*p的值,後使p+1;
*(++p)是先使p加1,後取*p的值
(*p)++;
表示p所指向的元素值加1(即a[0]++),而不是指標值加1.
example:
main()
int a[3],*p =a;
a[0] = 10; a[1] = 20;a[2] = 30;
printf("%d/t",*p++);
printf("%d\n",*++p);
輸出結果:10 30
main()
int a = ;
int *p = a+3;
printf("%d,%d,%d\n",*p,*(p+1),*p+3);
結果:4,5,7
多維陣列的指標
1.定義引用形式與指向一維陣列的指標類似
例如:int a[3][4],*p
p=&a[2][3];
2.行列位址表示
若有定義:int a[3][4];
下圖**中的數字表示每個元素的位址值。
指標與字串
1.字串的表示形式
用字元陣列實現:char string = " i love china!";
用字元指標實現:字元指標變數的定義 :char *p;
char *s = "i love china!" ;//初始化s
字串都以/0為結束標示符,所以實際長度為字串長度+1.
指標的使用方法 三
下面介紹指標與陣列的關係 指向一維陣列的指標 指向多維陣列的指標 指向字串的指標 1.指向陣列元素的指標變數的定義方式 型別 指標變數名 例如 int p 例如 int a 10 p p a 或 p a 0 圖示 指向陣列的指標的加減運算 p p指標移動p所指向型別的位元組,p所指向的是int型陣列...
函式指標的使用方法
如果我們在程式中定義了乙個函式 int max int x,int y 定義max函式 那麼函式名max就是呼叫這個函式的入口位址。就如同定義乙個陣列,這個陣列名就是這個陣列的首位址。既然是位址,就可以使用乙個指標來指向它。對應於int max int x,int y 我們定義的函式指標如下 int...
awk的使用方法 三
常用的awk內建變數 序號 名稱 描述 1 argc 命令列引數的數目。2 ar 包含命令列引數的陣列。3 argind 當前被處理的檔案的ar 的index 從0開始算 4 binmode 在non posix系統中,檔案的i o指定使用 binary 模式。5 convfmt 數字轉換格式 預設...