C语言,指针变量的*p,p以及&p的区别
来源:互联网 发布:mac桌面贴便签 编辑:程序博客网 时间:2024/05/18 18:44
以下面的情况说明:
int a = 5;
int* p = &a;
-----------------------------------------------------------------------------------------------------------
结论:
*p 是指针变量p指向的变量a的存储内容,*p = 5;
p 是指针变量的存储内容,因为p指向a,所以p的存储内容(存储空间的值)就是系统为变量a分配的存储地址;
&p 是对指针变量p进行取地址的操作。
-----------------------------------------------------------------------------------------------------------
分析:
int a = 5;
int* p = &a;
int* q = p;
【说明】
上面的程序中首先声明了一个int类型的变量a,初始化为5;这个过程为:
变量存储空间存储地址a5#ffa1在初始化时,存储空间存储的是int型的值5,存储地址是由系统自动分配的,同理要声明一个指向a的指针,在初始化的时候赋值给指针变量的值应该是变量a的存储地址,故而有 int* p = &a;变量
存储空间
存储地址
a5#ffa1
p#ffa1
#ffc0
在下面的程序中:
int arr[] = { 1, 2, 5, 7 };
int* parr = arr;
一眼看去为什么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的存储空间之中,上边的操作的结果如下:
变量存储空间存储地址a5#ffa1p#ffa1
#ffc0
q#ffa1
#ffb1使得指针变量q指向了变量a。
【说明】
从上面的操作可以看出,p代表的就是指针变量p的存储空间的值,上图中的#ffa1,也是p指向的变量的存储地址。(p的值如上图红色)
(2)
int* q = &p;
声明了一个指针变量q,并对q进行初始化,将指针变量p的存储地址赋给了指针变量q,那么在q的存储空间中存储的就是p的存储地址,上面的操作的结果就是:
变量存储空间
存储地址
a5#ffa1
p#ffa1
#ffc0
q#ffc0
#ffb1
使得指针变量q指向了指针变量p.
【说明】
从上面的操作可以看出,&p代表的是指针变量p的存储地址。(p的值如上图红色)
(3)
int* q = *p;
声明了一个指针变量q,并对其初始化,这一过程的操作如下:
变量存储空间存储地址a5#ffa1p#ffa1
#ffc0q5#ffb1为指针变量q初始化,q的存储空间中存储的值为5.
【说明】
1.从上面的操作可以看出,是将*p的值赋给了q,p指向变量a,p=#ffa1,而*p的过程就是获得p地址处的存储空间的值,即*(#ffa1)=5,也就是将5赋给了指针变量q,q的存储空间存储的是5;
2.指针变量是指向某一变量的变量,在其存储空间中存储的一般是其他变量的存储地址,上面的初始化过程int* q = *p;是非常危险的,有可能造成程序奔溃。
- C语言,指针变量的*p,p以及&p的区别
- C语言*p、p以及&p的区别
- C语言指针的*p++ ,*p(++), (*p)++,*++p的使用
- C语言指针的*p++ ,*p(++), (*p)++,*++p的使用
- 【C语言】对指针p ,*p ,**p 的认知
- 指针p,*p,&p之间的区别
- 指针p,*p,&p之间的区别
- p,&p,*p的区别
- p,&p,*p的区别
- p &p *p的区别
- p,&p,*p的区别
- p,*p,&p的区别
- *p++/(*p)++/*(p++)的区别
- p,&p,*p的区别
- *p++,*(p++),(*p)++的区别
- 指针 *p++与(*p)++的区别
- 【C语言】*++p,*p++,++*p,++*++p,++*p++
- C语言基础指针之const char *p,char const *p,,cahr * const p 三者之间的区别
- view的setTag() 和 getTag()应用
- 认真做人,努力做事情,我就是这样的程序员
- HDU 2795 Billboard
- 保留两位小数
- Adapter的含意,及用法
- C语言,指针变量的*p,p以及&p的区别
- 碰撞球小游戏开发总结
- 超级马里奥强势来袭
- iOS--UIViewController生命周期
- 【0Day】栈溢出漏洞基础——简单输入漏洞 & 修改返回函数
- iOS--UIScrollView和UIPageControl配合使用完成引用介绍页面
- <二>Ioc控制反转——bean id什么时候实例化(附源码)
- Hadoop学习资料、博客及网站汇总
- Singleton(一)