当指针指向值3时,C程序返回0

web*_*ker 1 c pointers

我认为在程序结束时,il将打印3但实际上它是0.

任何人都可以解释它是如何发生的吗?

这是代码:

int arr[3] = {2, 3, 4};
char *p;
p = arr;
p = (char*)((int*)(p)); // two conversion, means nothing, omit
printf("%d, ", *p);     // point to 2, 
p = (int*)(p+1);  // point to 3 ?
printf("%d", *p);
return 0;
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 5

您正在处理一组整数,如一系列字符.标记为"无意义"的行实际上意味着很多.

当你递增char* p1时,你将指针移动一个字节,但为了指向arr[1]你需要增加它的sizeof(int)字节.声明pint* p,然后p+1将做你需要的.

  • 标记为"无意义"的行实际上什么都不做.它将指针转换为`int*`然后再转换为`char*`.由于目标位置实际上有一个`int`,因此定义明确,结果指针必须等于'p`. (3认同)