相关疑难解决方法(0)

是否增加了一个明确定义的空指针?

在执行指针算术时有很多未定义/未指定行为的示例 - 指针必须指向同一个数组(或者一个超过结尾),或者在同一个对象内,限制何时可以根据上述进行比较/操作等

以下操作定义明确吗?

int* p = 0;
p++;
Run Code Online (Sandbox Code Playgroud)

c++ pointers language-lawyer

47
推荐指数
3
解决办法
3770
查看次数

2D数组索引 - 未定义的行为?

我最近进入了一些代码,做了一些有问题的2D数组索引操作.以下面的代码示例为例:

int a[5][5];
a[0][20] = 3;
a[-2][15] = 4;
a[5][-3] = 5;
Run Code Online (Sandbox Code Playgroud)

上面的索引操作是否受到未定义的行为的影响?

c arrays multidimensional-array undefined-behavior

4
推荐指数
1
解决办法
558
查看次数

将指向数组的指针转换为指针

考虑以下C代码:

int arr[2] = {0, 0};
int *ptr = (int*)&arr;
ptr[0] = 5;
printf("%d\n", arr[0]);
Run Code Online (Sandbox Code Playgroud)

现在,很明显代码打印5在常见的编译器上.但是,有人可以找到C标准中的相关部分,指出代码实际上有效吗?或者是代码未定义的行为?

我基本上要问的是,为什么&arr在投入时void *arr投入时相同void *?因为我相信代码相当于:

int arr[2] = {0, 0};
int *ptr = (int*)(void*)&arr;
ptr[0] = 5;
printf("%d\n", arr[0]);
Run Code Online (Sandbox Code Playgroud)

我在这里思考这个问题时发明了这个例子:数组的指针到数组的重叠 ......但这显然是一个独特的问题.

c language-lawyer

4
推荐指数
1
解决办法
960
查看次数