美文网首页
指针与数组

指针与数组

作者: 南三号 | 来源:发表于2017-10-08 23:37 被阅读7次

    C++/C程序中,指针和数组在不少地方都是可以相互替换使用的,这就让人产生一种错觉,以为两者是等价的。

    数组或是在静态存储区被创建(全局数组),或是在栈上被创建。数组名对应着,注意不是指向,一块内存,其地址与容量在生命期内保持不变(当然,使用了realloc()的不算),只有数组的内容可以改变。
    指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,当然也就更危险。

    区别之一:

    char a[] = "hello";
    a[0] = 'X';
    cout << a << endl;//输出“Xello”
    char *p = "world"; // 注意p指向常量字符串
    p[0] = 'X'; // compiler不能发现该错误,不过在运行的时候会发生runtime error
    cout << p << endl;
    

    区别之二:

    用运算符sizeof可以计算出数组的容量(字节数)。比如对应上面的代码,sizeof(a)的值是6(包括最后面的'\0')。指针p指向a,但是sizeof(p)的值却是4。这是因为sizeof(p)得到的是一个指针变量的字节数,相当于sizeof(char*),而不是p所指的内存容量siziof(char[6])。C++/C不能知道指针所指的内存容量。
    值得注意的是,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。那么不论数组a的容量是多少,sizeof(a)始终等于sizeof(char *)。

    相关文章

      网友评论

          本文标题:指针与数组

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