指针和地址的区别是什么?

指针和地址的区别是什么?,第1张

区别:

以下面的情况说明:

1、int a = 5

int* p = &a

结论:

*p   是指针变量p指向的变量a的存储内容,*p = 5

p   是指针变量的存储内容,因为p指向a,所以p的存储内容(存储空间的值)就是系统为变量a分配的存储地址;

2、分析:

int a = 5

int* p = &a

int* q = p

3、【说明】

1)上面的程序中首先声明了一个int类型的变量a,初始化为5;这个过程为:

2)在初始化时,存储空间存储的是int型的值5,存储地址是由系统自动分配的,同理要声明一个指向a的指针,在初始化的时候赋值给指针变量的值应该是变量a的存储地址,故而有 int* p = &a

4、在下面的程序中:

int arr[] = { 1, 2, 5, 7 }

int* parr = arr

同理,要是声明另外一个int类型的指针变量q:

1)int* q = p

声明了一个int类型的指针变量,并将指针变量p的值赋予q,同样是变量,a = 5,5是变量a的存储空间的值,那么p=?,p等于p存储空间的那个值,即p=#ffa1(a的存储地址);

现在将这个值赋给了指针变量q,正如a初始化的过程一样,int a=5的过程,是将5存储在了int类型变量的存储空间之中,初始化指针变量q时,也是将等号右边的值存储在q的存储空间之中,上边的 *** 作的结果如下:

使得指针变量q指向了变量a。

5、【说明】

从上面的 *** 作可以看出,&p代表的是指针变量p的存储地址。

int* q = *p

声明了一个指针变量q,并对其初始化,这一过程的 *** 作如下:

为指针变量q初始化,q的存储空间中存储的值为5.

【说明】

1、从上面的 *** 作可以看出,是将*p的值赋给了q,p指向变量a,p=#ffa1,而*p的过程就是获得p地址处的存储空间的值,即*(#ffa1)=5,也就是将5赋给了指针变量q,q的存储空间存储的是5;

2、指针变量是指向某一变量的变量,在其存储空间中存储的一般是其他变量的存储地址,上面的初始化过程int* q = *p是非常危险的,有可能造成程序奔溃。

你要明白指针就是地址这个概念,其实,

指针就是一类变量,是一类包含了其他变量或函数的地址的变量。与其他变量所不同的是,一般的变量包含的是实际的真实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。

因此,你所引用的第一个函数中的参数&a,本身就是一个指针,所以跟第二个函数中的是一样的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11475106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存