指针知识总结
2017-08-13 22:18
204 查看
定义int *a = 1;
a:取指针a的值(即地址)
*a:取指针a指向的内容
&a:取存放指针a的值的地址
一、基本概念及区别
1、变量a 本质上代表一个存储单元。CPU通过该存储单元的地址访问该存储单元中的数据。所以a本来代表两个值:存储单元的地址和储单元中的数据。于是就有了二异性。为了消除这种二义性,C语言规定a表示存储单元中的数据,&a表示存储单元的地址。
2、a存储单元中的数据可以是一个普通数值,也可以是另一个存储单元的地址,比如:a = &b; 语句就是将b的存储单元的地址存入a存储单元中。C语言规定*a代表a中存储的地址对应的存储单元中的数据,也就是访问*a就等于访问b,于是*a提供了通过a访问b中的数据的手段。
3、a表示a对应的存储单元中的数据。&a表示a对应的存储单元的地址。*a表示:首先,要求a对应的存储单元中的数据一定是另一个存储单元的地址。于是,*a表示另一个存储单元中的数据。
当a声明的类型是int时,a中存储的是一个整数数值,通过a可以访问(读取或修改)这个数值。
当a声明的类型是int*时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是一个整数数值;通过*a可以访问(读取、修改)该数值。a == &*a 都是该存储单元的地址。
当a声明的类型是int**时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是另外一个存储单元的地址,另外这个存储单元中存储的是一个整数数值;通过**a可以访问(读取或修改)这个数值。
二、应用
在rk3399芯片中,已知CRU的寄存器地址为0xff760000,当我们定义volatile unsigned long *cru = NULL;cru = (volatile unsigned long *)ioremap(0xff760000, 0xffe)后,此时,cru为0xff760000的内存地址在ioremap映射后的一个虚拟地址,由于cru对应的内存地址0xff760000存储的默认数据为0x000001b8,所以*cru的值为0x000001b8,&cru为自身的存储地址。
如果这里重新定义:volatile unsigned long *cru = NULL;cru = 2。此时cru的值为2,&cru为其存储地址,但因为2为不合法地址,其并没有对应的存储数据,所以打印*cru时会出现段错误。
a:取指针a的值(即地址)
*a:取指针a指向的内容
&a:取存放指针a的值的地址
一、基本概念及区别
1、变量a 本质上代表一个存储单元。CPU通过该存储单元的地址访问该存储单元中的数据。所以a本来代表两个值:存储单元的地址和储单元中的数据。于是就有了二异性。为了消除这种二义性,C语言规定a表示存储单元中的数据,&a表示存储单元的地址。
2、a存储单元中的数据可以是一个普通数值,也可以是另一个存储单元的地址,比如:a = &b; 语句就是将b的存储单元的地址存入a存储单元中。C语言规定*a代表a中存储的地址对应的存储单元中的数据,也就是访问*a就等于访问b,于是*a提供了通过a访问b中的数据的手段。
3、a表示a对应的存储单元中的数据。&a表示a对应的存储单元的地址。*a表示:首先,要求a对应的存储单元中的数据一定是另一个存储单元的地址。于是,*a表示另一个存储单元中的数据。
当a声明的类型是int时,a中存储的是一个整数数值,通过a可以访问(读取或修改)这个数值。
当a声明的类型是int*时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是一个整数数值;通过*a可以访问(读取、修改)该数值。a == &*a 都是该存储单元的地址。
当a声明的类型是int**时,a中存储的是一个存储单元的地址,而该存储单元中存储的数据是另外一个存储单元的地址,另外这个存储单元中存储的是一个整数数值;通过**a可以访问(读取或修改)这个数值。
二、应用
在rk3399芯片中,已知CRU的寄存器地址为0xff760000,当我们定义volatile unsigned long *cru = NULL;cru = (volatile unsigned long *)ioremap(0xff760000, 0xffe)后,此时,cru为0xff760000的内存地址在ioremap映射后的一个虚拟地址,由于cru对应的内存地址0xff760000存储的默认数据为0x000001b8,所以*cru的值为0x000001b8,&cru为自身的存储地址。
如果这里重新定义:volatile unsigned long *cru = NULL;cru = 2。此时cru的值为2,&cru为其存储地址,但因为2为不合法地址,其并没有对应的存储数据,所以打印*cru时会出现段错误。
相关文章推荐
- C语言指针和数组知识总结(上)
- C++ 知识回顾总结 -- 指针
- 内存管理、野指针、读写字符的函数、预编译处理、宏定义及条件编译的知识总结
- C语言指针基础知识总结
- C++基础知识总结--指针
- C语言指针和数组知识总结(下)
- C语言指针和数组知识总结(下)
- 指针知识梳理5-字符串与指针,程序内存总结
- C/C++基础知识总结——数组、指针域、字符串
- C---指针与数组知识总结
- com基础知识总结, 智能指针,匈牙利命名法
- 总结C语言指针部分的知识
- 指针知识梳理5-字符串与指针,程序内存总结
- 指针知识总结
- C语言中_指针_的相关知识总结
- 函数指针,数组指针等知识总结
- C语言指针和数组知识总结(上)
- C++指针知识总结.
- 指针知识总结
- C++指针知识的复习与简单总结