第四章 指针和数组
再论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初始化编译通不过