• 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";
  • 相关阅读:
    2018福大软工实践第二次结对作业
    2018福大软工实践第一次结对作业
    《构建之法》第三章读书笔记
    《构建之法》第八章读书笔记
    Beta版本冲刺前准备
    项目测评
    Alpha版本事后诸葛亮
    Alpha版本冲刺(十)
    Alpha版本冲刺(九)
    Alpha版本冲刺(八)
  • 原文地址:https://www.cnblogs.com/machao/p/5584988.html
Copyright © 2020-2023  润新知