c - 说一个指针等于C中内存中的一个位置

标签 c pointers vector

我这里有一段非常简单的代码,但我无法真正理解内存中发生了什么:

#include <stdio.h>
#include <stdlib.h>

int main(){

    int v[8], *u = &v[2];
    v[2] = 20;
    printf("%d",*u);

    return 0;
}

所以基本上,当我要求它打印 *u 时,它会给我 20。我不明白为什么。我是指针的新手,我从未见过您为 *pointer 赋值的示例。

我只能编写简单的代码,例如:

#include <stdio.h>
#include <stdlib.h>

int main(){

    int a = 10, *b;
    b = &a;
    printf("%d",*b);

return 0;
}

我可以很容易地理解发生了什么。有人可以比较这两种情况下内存中发生的情况吗?

非常感谢!

最佳答案

int v[8], *u = &v[2];

这一行定义了两件事。它正在创建一个名为 v 的整数数组,其中存储了 8 个整数。它还创建了一个指向 int 的指针,称为 u,它被设置为指向 v 中的第二个元素。

v[2] = 20;

此行将 v 数组中的第二个元素设置为 20。请记住,u 也指向上一行中的此元素。

printf("%d",*u);

这一行只是打印了 u 指向的值。因为它指向数组 v 中的第二个元素,并且该元素设置为 20,所以它会打印 20。

您的第二个代码:

int a = 10, *b;
b = &a;
printf("%d",*b);

也可以写成:

int a = 10, *b = &a;
printf("%d",*b);

它只是将第二行移动到第一行。那么你的两个例子之间的唯一区别就是数组符号。

关于c - 说一个指针等于C中内存中的一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175227/

相关文章:

c - 使用通用字段初始化结构的通用 API

C#引用成员变量

android - 我可以在大型项目中使用 SVG 代替 PNG 吗

c++ - vector 调整大小行为复制和赋值

c - cygwin 中的\a 没有声音

python - 有关 HCI 滤波器 socket 选项的详细信息?

c - 通过 mex 传回数组

c - 服务器和客户端之间的全双工通信

控制到达 C 中非 void 函数的末尾

c++ - 在不破坏保留元素的情况下更改 vector 的大小