【发布时间】:2015-12-18 13:00:15
【问题描述】:
#include <stdio.h>
int main(){
int arr[] = {1, 2, 3, 4};
int *p;
p = arr;
printf("%d\n", *p);
printf("%d\n", *arr);
p++;
printf("%d\n", *p);
}
此代码输出:
1
1
2
但是当我们添加如下两行时:
#include <stdio.h>
int main(){
int arr[] = {1, 2, 3, 4};
int *p;
p = arr;
printf("%d\n", *p);
printf("%d\n", *arr);
p++;
printf("%d\n", *p);
arr++;
printf("%d\n", *arr);
}
此代码输出:
C:\Users\Hasnat\Desktop\test.c||In function 'main':|
C:\Users\Hasnat\Desktop\test.c|11|error: lvalue required as increment operand
=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===
为什么我们不能以与增加包含该数组地址的指针相同的方式增加一个数组以获取下一个元素??
【问题讨论】:
-
因为它是一个数组。答案是这样的。如果需要,它只是衰减成一个指针,但它是一种完全不同的动物。
-
你正试图增加 arr 的 address 那里。
-
为什么苹果尝起来不像橙子?两者都是球体,长在树上。
-
@MrLister:在函数声明的上下文中,这个
int arr[]等价于int * arr。 -
@Talaria:你的意思可能是
..., *(arr + 1))。
标签: c arrays pointers postfix-operator