zoukankan      html  css  js  c++  java
  • c 数组与指针的使用注意事项

    数组变量和指针变量有一点小小的区别

    所以把数组指针赋值给指针变量的时候千万要小心

    加入把数组赋值给指针变量,指针变量只会包含数组的地址信息

    而对数组的长度一无所知

    相当于指针丢失了一部分信息,我们把这种信息的丢失称为退化

    只要把数组当做参数传递给函数,数组免不了退化为指针

    但需要记清楚代码中那些地方发生过数组退化

    因为他会引起一些不易察觉的错误

    举例说明:

    char ar[] = "abc";
    sizeof(ar) 结果为:6
    char *ch = ar;

    sizeof(ch) 结果为 8 在32位平台上是4 64位平台是 8

    void func(char a[]) {

        printf("%lu",sizeof(a));

    }

    结果为 8  在32位平台上是4 64位平台是 8

    举一个好玩的例子

    int name[] = {1,4,100};

    printf("%i",3[name]);

    这个打印结果是100

    name[3] == *(name + 3) == *(3 + name) == 3[name]

    在对字符串字面量 修改的时候就会报错

    char *name = "abc";
    name[2] = name[0];
    当做这个操作的时候就会报错,原因是"abc" 放在存储区的 常量区,是一个只读的属性,为了实现修改的目的可以这么做
    char name[] = "abc";
    name[2] = name[0];
    这样是 定义了一个字符数组,然后把abc 的值copy 给这个数组,这个数组如果在函数内部,是放到存储器的栈内的

    因此在平时的开发中,如果需要一个字符串字面量 应该这么写 当改变这个值的时候,编译器就会给出警告信息
    const char *name = "abc";
  • 相关阅读:
    展示
    发布说明
    团队作业Week14
    Scrum Meeting NO.10
    Scrum Meeting NO.9
    Scrum Meeting NO.8
    Scrum Meeting NO.7
    Scrum Meeting NO.6
    ES6/ES2015核心内容
    用React & Webpack构建前端新闻网页
  • 原文地址:https://www.cnblogs.com/machao/p/5584988.html
Copyright © 2011-2022 走看看