指针
1. 概念
学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。
正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。
#include <stdio.h>
int main ()
{
int var_runoob = 10;
int *p; // 定义指针变量
p = &var_runoob;
printf("var_runoob 变量的地址: %p\n", p);
return 0;
}
运行结果如下
var_runoob 变量的地址: 0x7ffeeaae08d8
地址:操作系统的寻址空间编号,也就是操作系统给每个存储单元分配了统一的编号
指针就是地址
指针变量就是保存地址编号的变量
32bit平台下,地址总线32位,所以地址编号32位编号,指针变量就是32位即4字节
2. 指针的定义方法
1.指针的定义:
数据类型 *指针变量名;
数据类型 *指针变量名1,*指针变量名2,*指针变量名3,...;
*号在指针变量定义时不能省略,否则就会变成一般变量的定义
2.指针的运算符
&:获取一个变量的地址
*:在定义一个指针变量时,起到表示作用,表示定义的是一个指针变量,除此之外其它地方都表示获取一个指针变量保存的地址里面的内容
- 扩展:如果一行中定义多个指针变量的前面都需要加*修饰
int a = 10;
int *p;//定义一个int型指针变量
p = &a; //int指针变量p指向 int型变量a的地址int *p1,*p2,*p2; //指针的定义,定义三个int型指针变量
int *pa = NULL; //空指针
int *pb; //野指针
void *pd;//万能指针,这个指针可以指向任意数据类型的地址
3. 指针的引用
指针变量中只能存放地址,与指针相关的两个运算符时&(取地址运算)和*(指针运算)
int a = 10;
int *p;//定义一个int型指针变量
p = &a; //int指针变量p指向 int型变量a的地址
// *p = *&a = a
// *&p = p = &a = &*p;
// &*p = &a = p
printf("%d\n",a); //打印变量a的值
printf("%p\n",&a);//打印a的地址
printf("%d\n",*&a);//对a取地址再取值,还是a自己
printf("%p\n",p); //指针变量p,也是变量a的地址
printf("%p\n",*&p);//取地址的地址,再取值,还是地址本身
printf("%d\n",*p);//取地址里面的值
printf("%p\n",&*p);//取地址里面的值,再取这个值的地址,还是地址本身