指针数组就是每1个成分存放多少个位置,指针数组比较符合用来针对若干字符串澳门永利备用网址

(一)指针数组

指针数组正是每3个要素存放叁个地点,约等于2个指针变量。
如: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)是坚定不移1回比较字符串中的成分
而if(strcmp(*name[k],*name[j])>0)只比较指向字符串中的首成分
附:strcmp只是一味的依照ascii码大小从头到尾比较,而stricmp则不区分轻重缓急写

(一)指针数组

指针数组就是每1个要素存放贰个地址,相当于2个指针变量。
如: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个变量,当通过八个(大于2)地址访问变量时,就叫做多重指针

(二)指向指针的指针

本着指针数据的指针变量 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指参数向量,当中每1个成分指向命令行中的多少个字符串。
main函数是操作系统调用的,所以实参只好由操作系统给出。在操作命令的图景下,实参是和实践文书的下令一道提交的。命令行中包涵命令名和要传给main函数的参数

举个例证, $./echo computer and tom
echo是命令名,computer等是参数,此例子中argc为4,因为命令名也算个中1个参数

(三)指针数组作main函数形参

带参数的main函数原型:
int main(int argc, char *argv[ ] );

argc和argv是main函数的形参,它们是程序的命令行参数。argc指参数的个数,argv指参数向量,其中每1个因素指向命令行中的2个字符串。
main函数是操作系统调用的,所以实参只可以由操作系统给出。在操作命令的意况下,实参是和推行文书的命令一道付出的。命令行中包含命令名和要传给main函数的参数

举个例子, $./echo computer and tom
echo是命令名,computer等是参数,此例子中argc为4,因为命令名也算在那之中3个参数