c程序指针

标签 c pointers

我正在尝试用 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/

相关文章:

c++ - 为什么需要多维数组中更高维度的维度范围?

c - C中函数指针数组的表达

c - 通过引用传递结构,返回指向新结构的指针

c++ - char* (int) 在 C++ 中是什么意思?

delphi - 创建指向类的新指针

c - *s 等于 s[i] 吗?

C 错误 : ld: library not found for -lgcc Collect2: error

c - 效率核心是否支持与性能核心相同的指令?

创建 BlockType 结构的单链表

c++:什么时候使用指针?