zoukankan      html  css  js  c++  java
  • 指针数组与带参main函数

    (一)指针数组

    指针数组就是每一个元素存放一个地址,相当于一个指针变量。
    如: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
    ",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
    ",*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,因为命令名也算其中一个参数

    务实,说实话!
  • 相关阅读:
    提高C#编程水平的50个要点
    纯CSS Tooltips..
    分支结构程序设计
    个性测试题
    CSS与DIV
    数据库设计中的14个技巧
    XML文档处理(树的应用)
    使用设计模式构建通用数据库访问类
    什么样简历最受名企欢迎?
    如何做需求分析
  • 原文地址:https://www.cnblogs.com/xtuxiongda/p/8284653.html
Copyright © 2011-2022 走看看