【发布时间】:2011-03-17 15:57:13
【问题描述】:
我正在浏览一个webpage,其中有一些常见问题解答,我发现了这个声明。
同样,如果 a 有 10 个元素并且 ip 指向 a[3],你无法计算或 访问 ip + 10 或 ip - 5。(有 一种特殊情况:你可以,在这个 案例,计算,但不访问,a 指向不存在元素的指针 刚刚超出数组的末尾, 在这种情况下是 &a[10]。
我被这句话弄糊涂了
你无法计算 ip + 10
我可以理解越界访问元素是未定义的,但是计算!!!。
我写了以下sn-p,其中计算(让我知道这是否是网站计算的意思)指针越界。
#include <stdio.h>
int main()
{
int a[10], i;
int *p;
for (i = 0; i<10; i++)
a[i] = i;
p = &a[3];
printf("p = %p and p+10 = %p\n", p, p+10);
return 0;
}
$ ./a.out
p = 0xbfa53bbc and p+10 = 0xbfa53be4
我们可以看到 p + 10 指向 p 之后的 10 个元素(40 字节)。那么网页上的声明究竟是什么意思。我是不是误解了什么。
即使在 K&R (A.7.7) 中也有此声明:
+ 运算符的结果是 操作数之和。一个指针 数组中的对象和任何值 可以添加整型。 ... 这 sum 是与 原始指针,并指向 同一数组中的另一个对象, 与原作适当偏移 目的。因此,如果 P 是指向 数组中的对象,表达式 P+1 是指向下一个对象的指针 大批。 如果总和指针指向 在数组边界之外, 除了在第一个位置以外 高端,结果是 未定义。
“未定义”是什么意思。这是否意味着总和将是未定义的,还是仅意味着当我们取消引用它时,行为是未定义的。即使我们不取消引用它并且只计算指向元素的指针越界,操作是否未定义。
【问题讨论】:
-
表示此特定位置的内容未定义(随机)。
-
undefined 意味着得到你所期望的就像把你银行账户里的钱转到我的银行账户一样糟糕。继续编写未定义的结构......总有一天会发生意想不到的......我将度过我梦想中的假期:)