指针:
- 让C语言变得简洁、高效。
- 直接操作硬件。
- 通过直接操作内存,提供一种对变量的间接访问形式。
- 访问一些没有名字的空间。
概念:
- 地址:用来区分内存当中不同字节的编号。
- 指针:指针就是地址,地址就是指针,指针具有指向的概念。
- .指针变量:用来存放指针(地址)的变量,使用变量
- 32位操作系统 cpu和内存间32根地址总线 所有类型指针变量占4个字节
- 64位操作系统 cpu和内存间64根地址总线 所有类型指针变量占8个字节
- .指针变量:用来存放指针(地址)的变量,使用变量
运算符
1.&运算符
(获得变量在内存空间中的首地址)
(*注意:该运算符只能搭配左值)
值:获得变量在内存空间中的首地址
类型:对变量取地址会使类型升级
int -> int *
char -> char *
double -> doule*
2.*运算符
到地址空间中找值
(*注意: *只能搭配指针使用)
值:获得指针指向空间中的值
类型:对地址取*操作,会让地址类型降级
int * -> int
char * -> char
double* -> double
&和*同时出现可以抵消
3.指针变量
1.定义:
存储类型 数据类型* 变量名;
int *p;
char *p;
double *p;
2.指针变量和普通变量的区别:
a:直接访问,通过变量名找到变量的空间来使用
*p:间接访问,通过变量在内存中的地址来使用该变量的空间
4.不同指针类型的特点
(1)算数运算符:
++:向内存高地址偏移指向数据类型大小个字节空间
--:向内存低地址偏移指向数据类型大小个字节空间
p - q:两个地址中间相差多少个对应数据类型的数据
*p++;
等价于:
*p;
p++;
(*p)++;
等价于:
*p;
(*p)++
(2) *运算符
int *p = 0x2000;
*p:取0x2000开始向下4字节空间中的数据,并按照整形来理解
char *p = 0x2000;
*p:取0x2000开始向下1字节空间中的数据,并按照字符来理解
double *p = 0x2000;
*p:取0x2000开始向下8字节空间中的数据,并按照双精度浮点数来理解
C语言拆分数字方法:
1987 % 10
1987 / 10
198 %10
198 / 10
19 %10
10 * 0 + 3
10 * a + 3
10 * aa + 3