天天看点

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初始化编译通不过

继续阅读