美文网首页C++
数组退化为指针--一个贵族的没落

数组退化为指针--一个贵族的没落

作者: 爱秋刀鱼的猫 | 来源:发表于2018-04-12 14:41 被阅读14次

首先来看这样一段代码:

#include<string>
#include <stdio.h>
#include<iostream>
using namespace std;
void each(int int_ref[10])
{
    cout<<sizeof(int_ref)<<endl;
    for(int i =0;i<10;++i)
    {
        cout<<int_ref[i]<<" ";
    }
    cout<<endl;
}

void each2(int (&int_ref)[10])
{
    cout<<sizeof(int_ref)<<endl;
    for(int i =0;i<10;++i)
    {
        cout<<int_ref[i]<<" ";
    }
    cout<<endl;
}
int main()
{
int szMsisdn[3];
cout<<sizeof(szMsisdn)<<endl;
int ref[10]={1,2,3,4,5,6,7,8,9,0};
each(ref);
each2(ref);
return 0;
}

这段代码运行的结果是:

12
4
1 2 3 4 5 6 7 8 9 0 
40
1 2 3 4 5 6 7 8 9 0 

其中值得注意的是:each函数的参数和each2的参数,一个是以数组名作为函数形参,一个是以数组引用做为函数形参。可以看出,前者的数组名退化为了指针。而且很遗憾,在失去其数组身份的同时,它还失去了其常量特性,即可以作自增、自减等操作,可以被修改。
所以,数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。

为什么说数组是贵族呢?

数组名可以看作是指针常量
根据结论2,数组名可以转换为指向其指代实体的指针,所以程序1中的第5行数组名直接赋值给指针,程序2第7行直接将数组名作为指针形参都可成立。

下面的程序成立吗?

1. int intArray[10];

2. intArray++;

这一段代码是不正确的。因为数组是一个指针常量,所以修改指针常量是不正确的!

相关文章

  • 数组退化为指针--一个贵族的没落

    首先来看这样一段代码: 这段代码运行的结果是: 其中值得注意的是:each函数的参数和each2的参数,一个是以数...

  • C++数组名和指针的区别

    主题思想:数组名绝对不是指针变量,而是代表数组这种数据结构,只是可以在参与运算时转化为指针常量 概念:指针,指针常...

  • JNI基础 -- C++基础知识(指针数组)

    数组和指针,数组指针,指针数组 数组 声明一个数组 这个比较简单,不做过多介绍 数组指针 数组指针是一个指针,指向...

  • Sizeof on array function paramet

    在C语言中,数组作为函数参数时将退化为指针。

  • 2019-09-18C语言复杂表达式与指针高级应用

    1.指针数组与数组指针 1.1、字面意思来理解指针数组和数组指针 (1)指针数组的实质是一个数组,这个数组中存储的...

  • 指针数组和数组指针

    1、指针数组 指针数组:指针的数组,数组的每一个元素为此类型的指针。 如:int* a[10];数组a的10个元素...

  • 没落贵族

    清晨7点半,他依旧熟睡在自己的房间内,不着衣衫,白天起床后只披一件紧身加棉旧式浴袍,很少出门走动,不喜交谈。除非无...

  • 没落贵族

    没落贵族 他不再用长发彰显叛逆 而当叛逆也都上了年纪 他也不再用嘶吼反抗压抑 压抑都已成唏嘘 岁月带走了关于青春的...

  • 没落贵族

    读书多了,胡思乱想也多了,有时不知不觉给自己做了定位,我似乎有点贵族气儿,却又谈不上贵族,顶多卯大劲算个没落贵族吧...

  • 混淆知识点

    1、指针数组&数组指针、常量指针&指针常量、函数指针&指针函数 数组指针&指针数组 数组指针的定义 int (*p...

网友评论

    本文标题:数组退化为指针--一个贵族的没落

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