数组与指针的转换,特殊的字符数组

在表达式中使用数组名,改名字会自动转化指向数组第一个元素的指针。

如:int iarr1[10];

    int iarr2[10];

    int *pa=iarr;//pa指向数组的第一个元素

但如下错误赋值代码有时候可能会让人误解:

    iarr2=iarr1;//error:

既然在表达式里数组名字会自动转换为指向数组第一个元素的指针,那为什么这些代码是错误的呢?

事实上,数组名是个const指针,即其值是不可修改的,等同于 int  *const iarr2;毕竟,如果这样的代码正确话,就意味着数组可以直接复制。

 

     字面值是没有地址的,所以不能把一个字面值常量赋给一个指针

        int *pi=&12;//error:字面值不是对象,不占用内存空间,没有地址

但是我想这里有个例外就是字符串字面值

      const char *pc1="a char pointer";//ok:字符串字面值是const char类型的数组,所以应该用const char*类型的指针

学C都知道,字符串实际上是字符数组 char cArra[]="a char pointer";//ok:注意:此字符数组不是const char类型

问题出现:我们怎么知道什么时候字符串字面值,什么时候是普通的字符数组呢?

       答案是:依据实际的程序上下文环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值