C语言深度解剖(精讲版)——读书笔记19 &&自己的一些理解

第四章  指针和数组

再论a 和 &a之间的区别:

char   a[5]={'A','B','C','D'};  

首先强调1个知识点:

a 和 &a的值是相同的,但是意义不相同;a是数组首元素的首地址; &a是整个数组首地址;

下面来看一下:

int main()
{
  char a[5]={'A','B','C','D
  char (*p3)[3] = &a;
  char (*p4)[3] = a;
  return 0;
}

上面对p3和p4的使用,哪个是正确的?p3+1  的值会是多少?p4+1 的值?

解析:

在C语言中,赋值符号“=”两边必须是相同的类型,p3定义的“=”两边都是数组的指针,一致!  p4定义的“=”两边数据类型不一致!左边的类型是指向整个数组的指针,右边的数据类型是指向单个字符指针。由于&a和a的值一样,而变量作为右值时编译器只是取变量的值,所以运行并没有什么问题。(不过警告你别这么用)

   (*p3)[3] = &a;  而  p3+1 后,p3指向元素'D'   char (*p4)[3] = a; p4+1后,p4同样指向'D'

变变呢?
int main()
{
char a[5]={'A','B','C','D'};
char (*p3)[10] = &a;
char (*p4)[10] = a;
return 0;
}
这两种会有什么样的问题?p3+1和 p4+1的值又是多少?

p3+1后,p3指针值加10,具体是什么不确定

而p4初始化编译通不过

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值