我正在尝试用 c 编写的一些程序,这个程序有问题 任何人都可以告诉我这有什么问题,我也想知道在上述情况下,如果指针值增加,那么它将覆盖以前的值地址作为
#include<stdio.h>
int main()
{
int a=9,*x;
float b=3.6,*y;
char c='a',*z;
printf("the value is %d\n",a);
printf("the value is %f\n",b);
printf("the value is %c\n",c);
x=&a;
y=&b;
z=&c;
printf("%u\n",a);
printf("%u\n",b);
printf("%u\n",c);
x++;
y++;
z++;
printf("%u\n",a);
printf("%u\n",b);
printf("%u\n",c);
return 0;
}
假设我们在上面的程序中得到的值(指针值没有增加)是 65524 65520 65519 递增后指针的值为 65526(作为 int 的 2 增量) 65524(作为 float 的 4 增量) 65520(作为 char 变量的 1 个增量)
那么如果在这种情况下,新的指针地址是否会覆盖先前地址的内容以及新地址中包含什么值
最佳答案
你不能像那样递增 x,y,z。
您无法保证它们在内存中的排列顺序 - 'x' 之后的内存地址可以是任何内容。
编辑只是为了澄清: 是的,你可以增加一个指针,但你必须确保你“拥有”你随后指向的内存——通常是字符串或数组中的内存。
您不能假设单独的变量在内存中彼此相邻 - 事实上,不同类型可能会被隔开,以便每个新变量都从 4 字节边界开始。
关于c程序指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723966/