变量名和指针有什么区别?

ash*_*ani -3 c c++ variables pointers

考虑这个例子.

#include <stdio.h>

int main() {
    int a = 5;
    int b = a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人告诉我在上面的代码中,首先被创建的存储器为整数的块和分配的值5,然后一个指向该块.然后,b也指向包含值5的同一块内存.

所以我的问题是,如果a是一个整数变量,它也指向某个东西,那么它与指针有什么不同?

如果这个问题太基础,请原谅我.但我需要知道.

For*_*ent 5

在这种情况下,谁向你解释这个是错误的:

#include <stdio.h>

int main() {
    int a = 5; //variable a has value 5 put it
    //a does have an address
    int b = a; 
    //variable b is created, it has its own seperate memory address.
    //in this case the CONTENTS of a (5) are dumped inside b
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

说不int b=a;会使彼此的变量别名.

你听到的是这个:

//...
int a=1;
int *b = &a; //create a pointer called b and make it point to a 
//(set it equal to address of a)
Run Code Online (Sandbox Code Playgroud)

在你的情况下你有:

memory addresses:         variable name           value stored at memory address
1000                      a(int)                    5
1004                      b(int)                    5
Run Code Online (Sandbox Code Playgroud)

明显改变a的值并且不会相互影响

在我描述的情况下你有这个:

memory addresses:         variable name           value stored at memory address
1000                      a(int)                    5
1004                      b(int*)                   1000
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,因为它b是一个指针,它的实际值是一个地址.

这样做*b=3;会改变.的价值a

  • 注意:变量名称不存储在内存中. (2认同)

hac*_*cks 5

当你声明

int a = 1;
Run Code Online (Sandbox Code Playgroud)

编译器为字节分配内存sizeof(int)并命名该数据位置(或内存块)a并在该块中放置一个值1。用一种非常简单的方式来说,变量是数据的命名位置。

您可以将其视为将分配的值放入带有变量名称的框中,如下所示
在此输入图像描述

对于您创建的所有变量,都会使用变量名称创建一个新框来保存值。

将一个变量分配给另一个变量会生成该值的副本并将该值放入新框中。

a = 2;
int b = a;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

因此,ab不是指针,而是具有自己地址的不同内存块的名称。