对指针的基础理解
2016-11-14 19:22
176 查看
int num = 5;
int *p;
p = #
p和num的关系如上图所示,p对应的内存空间里保存的是num对应内存空间的地址。如果进行p++操作,得到的是0x1004,因为int型变量是四个字节,如果是num是char型,那p++的结果就是0x1001。这也是步长的概念,对指针加一,跳了多少字节,步长就是多少。
如果进行(*p)++操作,得到的就是6。
这里面牵扯到 对应的内存空间 和 指向的内存空间 的区别,对p来说,它对应的内存空间就是存储0x1000的那个空间,p指向的内存空间则是它对应内存空间里存储的地址值对应的内存空间,也就是0x1000这个地址所代表的空间。p这个内存空间也是0x2000所指向的内存空间。
p 对应空间的地址;*p 对应指向空间的值。*p的意思就是找到p变量里保存的地址所对应的内存空间里的内容。
如果再定义一个int ** pp = &p
这里**pp也等于5. pp 保存的是p的地址。
可以得出下面一系列等式
num == **pp == *p
&num == *pp == p
pp == &p
个人感觉&与*就像正负号,放在一起就会抵消。不知这样说对不对
char*p = “Hello world”
p 中保存的是字符串首字符的地址
p + 1就是第二个字符的地址
下面这些还在迷糊中,先记住吧。。。
数组名是一个指针常量,保存数组首元素的地址。
对一维数组的地址取值等于数组首元素的地址。
对一维数组名取地址等于数组的地址。
二维数组名是一个指针常量,保存首个一维数组的地址。
对三维数组的地址取值等于首个二维数组的首个一维数组的地址。
int *p;
p = #
p和num的关系如上图所示,p对应的内存空间里保存的是num对应内存空间的地址。如果进行p++操作,得到的是0x1004,因为int型变量是四个字节,如果是num是char型,那p++的结果就是0x1001。这也是步长的概念,对指针加一,跳了多少字节,步长就是多少。
如果进行(*p)++操作,得到的就是6。
这里面牵扯到 对应的内存空间 和 指向的内存空间 的区别,对p来说,它对应的内存空间就是存储0x1000的那个空间,p指向的内存空间则是它对应内存空间里存储的地址值对应的内存空间,也就是0x1000这个地址所代表的空间。p这个内存空间也是0x2000所指向的内存空间。
p 对应空间的地址;*p 对应指向空间的值。*p的意思就是找到p变量里保存的地址所对应的内存空间里的内容。
如果再定义一个int ** pp = &p
这里**pp也等于5. pp 保存的是p的地址。
可以得出下面一系列等式
num == **pp == *p
&num == *pp == p
pp == &p
个人感觉&与*就像正负号,放在一起就会抵消。不知这样说对不对
char*p = “Hello world”
p 中保存的是字符串首字符的地址
p + 1就是第二个字符的地址
下面这些还在迷糊中,先记住吧。。。
数组名是一个指针常量,保存数组首元素的地址。
对一维数组的地址取值等于数组首元素的地址。
对一维数组名取地址等于数组的地址。
二维数组名是一个指针常量,保存首个一维数组的地址。
对三维数组的地址取值等于首个二维数组的首个一维数组的地址。
相关文章推荐
- 对数组和指针的基础理解
- C语言中 指针的基础知识总结, 指针数组的理解
- C基础知识之理解指向函数的指针
- C++ 指针基础理解
- C/C++基础———C/C++中函数指针和数组指针、数组名的一些个人理解
- 【C语言基础】对指针数组,数组指针,函数指针, 函数指针数组,指向函数指针数组的指针的理解
- 指针的基础理解,以及引用的理解
- 理解C语言-第21课-指针基础
- 【c基础】对函数指针的详细理解
- 理解指针之基础篇
- 对C语言中指针的理解与其基础使用实例
- 【c语言基础】字符串数组与字符串指针的理解心得
- 理解 Zend 框架 基础篇
- 网络基础知识讲座之二:理解子网和CIDR
- 指针的理解
- 网络基础知识讲座之九:初步理解TCP协议
- 深入理解C语言指针的奥秘
- 深入理解c语言指针的奥秘
- 网络基础知识讲座之十:TCP协议理解进阶
- 指针的理解 [2006-09-26]