我有这样的代码:
#include <stdlib.h>
#include <stdio.h>
void func(int **b)
{
printf("b = %p\n", b); // 0x7ffe76932330
*b = *b + 1;
}
int main(void)
{
int b[10] = {0};
printf("b = %p\n", &b[0]); // 0x7ffe76932330
printf("%d\n", b[0]); // 0
func(&b);
printf("%d\n", b[0]); // 4
return 0;
}
这段代码是否有未定义行为(UB)?在我看来是有的,至少因为不同类型没有明确的转换 int (*)[10] != int **
。
另外,如果我有 char b[] = "some string";
会怎么样呢?行为几乎相同......奇怪。
*b
的重新赋值几乎可以确定是的。 - Mooing Duck*b
会导致未定义行为。 - Mooing Duck*b
的重新赋值几乎肯定会导致未定义行为。 - undefined