美文网首页
关于C中const的一些解惑

关于C中const的一些解惑

作者: dongshixiao | 来源:发表于2018-03-26 08:32 被阅读0次
    const int *p; 
    int const* p;
    int* const p; 
    

    傻傻分不清楚, 上大学时没有理解清楚的知识点,终于知道咋回事了。

    const int *p; // const修饰的是*p,因此*p是常量不能改变,但可以改变p的指向;
    int const* p; // 同上,主要是看const与*的前后关系;
    int* const p; // const修饰的是p,因此p的指向是常量不能改变,但*p可以改变;
    const int const *p; // 两个const既修饰了*p也修饰了p,因此*p与p都是常量不能改变;
    

    下面贴一点代码:

    #include "stdio.h"
    int main(int argc, char const *argv[]) {
    
      int a = 80;
      int b = 88;
      const int *p ;
      p=&a;
      p=&b;
      printf("%d\n",*p );
    
      int* const p1=&a;
      //p1 = &b;  
      //storage/c/10/const.c:12:6:
      //error: assignment of read-only variable ‘p1’
      //错误:只读变量P1的赋值
      printf("%d\n",*p1 );
    
      return 0;
    }
    

    请注意看报错信息。
    由此可以知道,const比较害羞,谁离他近,他就修饰谁。
    一个用法:

    //如果函数的意图并不是修改数组的数据内容,
    //只是用到数组里面的数据,那么形参可以定义成const开头的
    //比如进行输出一些字符串:
    void put1(const char * string) {
      while (*string) {
        putchar(*string++);
      }
    }
    

    ***********************万能的分割线*********************

    以前都是在win下学习C,现在搬到linux上面,要习惯这两个参数的存在。argc表示有几个参数(加上自身这个可执行文件) argv表示字符串数组把argc个参数都列出来。举个栗子:

    #include "stdio.h"
    int main(int argc, char const *argv[]) {
      int i=0;
    for ( i = 0; i < argc; i++) {
      printf("%s\n", argv[i]);
    }
      return 0;
    }
    

    在命令行调用编译后的程序

    ./a.out "aaa bbb" ccc
    

    输出:

    ./a.out
    aaa bbb
    ccc
    

    在命令行调用编译后的程序

    ./a.out aaa bbb ccc
    

    输出:

    ./a.out
    aaa
    bbb
    ccc
    

    相关文章

      网友评论

          本文标题:关于C中const的一些解惑

          本文链接:https://www.haomeiwen.com/subject/szfaqftx.html