数组指针是定义一个指针来操作数组。
1 | int arr[5] = {10, 20, 30, 40, 50}; |
在初学阶段,学习的是定义数组指针,[]里面的值必须和数组的大小一致。
但是为什么要一致?不一致可以吗?
如果我们这样定义:
1 | int arr[5] = {10, 20, 30, 40, 50}; |
编译器会警告:
我们暂时忽略警告,我们就用这个指针来操作一下数组。
执行p++;
1 | int arr[5] = {10, 20, 30, 40, 50}; |
为什么输出的是40?
定义p指针,大小是3,说明该指针+1的能力是三个int大小,p++后,p就指向到了40这个地址。
此时的p应该指向的是{40,50}。
验证一下,*p得到的是{40,50}这个数组。
那么*p+1应该就是50的地址。
果然如此。所以定义数组指针并非一定要和数组的大小一致。
因为数组指针,他首先是一个指针,他不应被应该指向谁而约束。
但是仅限于c语言,再c++后对数组指针的定义做了强制规定,必须和数组大小一致,为了就是避免产生未定义行为。
恰恰说明了c语言的强大。