(一)指針數組 指針數組就是每一個元素存放一個地址,相當於一個指針變數。如:int *p[4]指針數組比較適合用來指向若幹字元串,使得處理字元串更加靈活。例如,現在要將若幹字元串按字母順序由小到大輸出 通過上例子,試比較if(strcmp(name[k],name[j])>0)和if(strcmp( ...
(一)指針數組
指針數組就是每一個元素存放一個地址,相當於一個指針變數。
如:int *p[4]
指針數組比較適合用來指向若幹字元串,使得處理字元串更加靈活。
例如,現在要將若幹字元串按字母順序由小到大輸出
1 #include<stdio.h> 2 #include<string.h> 3 int main(){ 4 void sort(char *name[],int n); 5 void print(char *name[],int n); 6 char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"}; 7 8 int n=5; 9 sort(name,n); 10 print(name,n); 11 return 0; 12 } 13 14 void sort(char *name[],int n) //對字元串排序 15 { 16 char *temp; 17 int i,j,k; 18 for(i=0;i<n-1;i++){ 19 k=i; 20 for(j=i+1;j<n;j++) 21 if(strcmp(name[k],name[j])>0) k=j; 22 if(k!=i){ 23 temp=name[i];name[i]=name[k];name[k]=temp; //將指向第i個字元串的數組元素的值與指向第k個字元串數組元素的值對換 24 } 25 } 26 } 27 28 void print(char *name[],int n){ //輸出字元串 29 int i; 30 for(i=0;i<n;i++) 31 printf("%s\n",name[i]); 32 }
通過上例子,試比較
if(strcmp(name[k],name[j])>0)和if(strcmp(*name[k],*name[j])>0)的區別:
if(strcmp(name[k],name[j])>0)是從頭到尾一次比較字元串中的元素
而if(strcmp(*name[k],*name[j])>0)只比較指向字元串中的首元素
附:strcmp只是單純的按照ascii碼大小從頭到尾比較,而stricmp則不區分大小寫
(二)指向指針的指針
指向指針數據的指針變數 char **p;
指針數組的元素可以指向字元串,也可以指向整型數據或者實型數據
指向字元串的小例子
1 #include<stdio.h> 2 int main(){ 3 char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"}; 4 char **p; 5 int i; 6 for(i=0;i<5;i++){ 7 p=name+i; //先使p指向name數組的name[0],*p是name[0]的值,即第一個字元串首字元的地址,依次輸出5個字元串 8 printf("%s\n",*p); 9 } 10 }
指向整型數據的小例子
1 #include<stdio.h> 2 int main(){ 3 int a[5]={1,3,5,7,9}; 4 int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; 5 int **p,i; 6 p=num; 7 for(i=0;i<5;i++){ 8 printf("%d ",**p); //p是&num[0],*p是num[0]的值,即a[0],**p是a[0]的值 9 p++; 10 } 11 }
利用指針變數訪問另一變數稱為間接訪問
指向指針數據的指針用的就是二級間址,說通俗點就是通過兩個地址訪問一個變數,當通過多個(大於2)地址訪問變數時,就稱為多重指針
(三)指針數組作main函數形參
帶參數的main函數原型:
int main(int argc, char *argv[ ] );
argc和argv是main函數的形參,它們是程式的命令行參數。argc指參數的個數,argv指參數向量,其中每一個元素指向命令行中的一個字元串。
main函數是操作系統調用的,所以實參只能由操作系統給出。在操作命令的狀態下,實參是和執行文件的命令一起給出的。命令行中包括命令名和要傳給main函數的參數
舉個例子, $./echo computer and tom
echo是命令名,computer等是參數,此例子中argc為4,因為命令名也算其中一個參數