1.陣列元素可以用作函式實參,用法與變數相同,向形參傳遞陣列元素的值。(單向傳遞)
2.陣列名可以用作函式的實參和形參,傳遞的是陣列第乙個元素的位址。(可利用這一特點改變實參陣列的值)
3.形引數組可不指定其大小,因為形引數組首元素和實參陣列首元素具有同一位址,定義時在陣列名後跟乙個空的方括號。
4.多維陣列名作函式引數時,對形參的定義可以省略第一維的大小。(int array [ ][8])
1.指標變數既可以指向變數,也可以指向陣列元素(把某一元素的位址放到乙個指標變數中)。所謂陣列元素的指標就是陣列元素的位址。
2.引用陣列元素可用下表法和指標法。(使用指標法使目標程式質量高,占用記憶體少,執行速度快)
例:int a[10]; int p; p=&a[0]或p=a;
或者直接寫成int p=a;
3.當指標指向乙個陣列元素時,p+1指向同一陣列中下乙個元素,p-1指向同一陣列中的上乙個元素,即加或減乙個陣列元素所占用的位元組數。(int,long,float—d=4;char—d=1)
例:p的初值為&a[0],則 * ( p+1)= (a+i)=a[5]([ ]實際上是變址運算子,a[ i]即計算a+i)
4.如果指標變數p1和p2都指向同一陣列中的元素,如執行p2-p1,結果是兩個位址之差除以陣列元素長度*,即求出了元素間的相對距離。(注意兩個位址不能相加)
5.指標引用陣列的三種方法:
輸入:for(i=0;i<10;i++)
a.scanf("%d",&a[i]);
b.scanf("%d"a+i);
c.scanf("%d",p);
列印:a.for(i=0;i<10;i++)
printf("%d",a[i]);
b.for(i=0;i<10;i++)
printf("%d",*(a+i);
c.用指標指向當前陣列元素
nt *p
for(p=a;p<(a+10);p++)
printf("%d",*p);
//p++高效簡潔,不能a++,變數才可以++
6.用陣列名做函式引數,將形參陣列名作為指標變數來處理。
例://實參用陣列名a,形參可用陣列名或指標變數名
a.形參和實參都用陣列名
int main()
int f(int x[ ])//共用一段記憶體
b.實參陣列名,形參指標變數
int main()
int f(int *x)//可改變x的值指向a任一元素
c.實參形參都用指標變數
int main()
int f(int *x)//p為一變數易更改
7.通過指標引用多元陣列
a.多維陣列元素的位址(以int a[3][4]為例)
表現形式含義值
a二維陣列名,指向一維陣列a[0],即0行起始位址
2000
a[0],*(a)
0行0列元素位址
2000
a+1,&a[1]
1行起始位址
2016
a[1],*(a+1)
1行0列元素a[1][0]位址
2016
a[1]+2,*(a+1)+2,&a[1][2]
1行2列元素a[1][2]位址
2024
* a[1]+2,* (*(a+1)+2),a[1][2]
1行列元素a[1][2]值
13b.指向多維陣列元素的指標變數
int *p指向陣列元素
int (*p)[m列]指向m個元素構成的一維陣列
1.字串引用方式
a.用字元陣列存放乙個字串(%s輸出字串,%c輸出字元元素)
b.用字元指標變數指向乙個字串常量
例:char *a=「i love you!」;
c指標陣列與陣列指標與指標函式與函式指標筆記
include include typedef struct t ooxx t ooxx,pt ooxx 測試陣列指標 void test ooxx arrayp t ooxx p int num 測試指標陣列 void test ooxx parray t ooxx p,int num 測試函式指...
函式指標與函式指標陣列
去看這篇文章,寫的非常好 void func 這是乙個函式指標宣告,定義的時候,要把真實的函式位址賦給 func func function 你已經寫好了function 函式,再把function這個函式位址賦給func,有啥用?沒啥 用吧。來看看函式指標陣列你就只知道了 void func 25...
指標與陣列與函式指標
變數的本質是一段儲存空間的別名,指標的本質是一種特殊型別的變數,這種變數的儲存空間中儲存的是另乙個變數的位址。號的意義 號代表所申明的變數是指標 號表示取指標所指向記憶體空間的值。該使用傳值呼叫還是傳址呼叫 當函式內部需要改變實參的值,則需要使用傳址呼叫 如果函式需要傳入的引數型別複雜,體積巨大,又...