说指针等于C中存储器中的位置

Tri*_*lor 3 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;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上,当我要求它打印*你,它会给我20.我不明白为什么.我是指针的新手,我从未见过你给一个*指针值的例子.

我只能制作简单的代码:

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

int main(){

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

return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以很容易地理解发生了什么.在这两种情况下,有人可以对内存中发生的事情进行比较吗?

非常感谢你!

小智 5

int v[8], *u = &v[2];
Run Code Online (Sandbox Code Playgroud)

这一行定义了两件事.它正在制作一组称为v具有8个整数存储空间的整数.它也是一个指向int的指针,调用u它被设置为指向第二个元素v.

v[2] = 20;
Run Code Online (Sandbox Code Playgroud)

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

printf("%d",*u);
Run Code Online (Sandbox Code Playgroud)

该行只打印u指向的值.由于它指向数组中的第二个元素v,并且该元素设置为20,因此它将打印20.

你的第二个代码:

int a = 10, *b;
b = &a;
printf("%d",*b);
Run Code Online (Sandbox Code Playgroud)

也可以写成:

int a = 10, *b = &a;
printf("%d",*b);
Run Code Online (Sandbox Code Playgroud)

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

  • 注意:它不是**SECOND**元素,它是**第三个**. (2认同)