//-------------------------------指针
内存单元的指针和内存单元的内容是两个不同的概念。
内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。
总结:对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。
使用指针好处
a.为函数提供修改调用变量的灵活手段;
b.让函数有多个返回值
c.可以改善某些子程序的效率
>>在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针 传递地址而不是实际数据,即提高传输速度,又节省大量内存。
3、变量的存取方式 存取方式分为两种:直接存取和间接存取
int a = 3; 直接存取:变量的赋值和取值(通过变量名进行存取值)
int b = a;
printf("%d",b);
间接存取:通过指针(地址)间接操作完成。
int *b = &a;
printf("%d",*b);
//------------------------------指针变量
1、指针变量 在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。
因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
注意: 严格意义上说,指针是一个地址,是一个常量指针变量是存放一个地址,是一个变量。
定义一个指针变量
对指针变量的定义包括三个内容:
1)指针类型说明,即定义变量为一个指针变量;
2)指针变量名;
3)变量值(指针)
其一般形式为: 类型说明符 *变量名;
注意:
1)在定义指针时,“*”号表示定义的变量是指针变量,
变量的值只能存放地址。
2)一个类型的指针只能指向同类型的变量,不能指向其他类型的变量。
//-------------------------------初始化和引用
指针变量初始化的方法有两种:
定义的同时进行初始化和先定义后初始化
1)定义的同时进行初始化
int a = 5; int *p = &a;
2)先定义后初始化
int a; int *p; p=&a;
3)把指针初始化为NULL int *p=NULL;
int *p = NULL; // 还是不能用这个指针变量 暂时把p有所指向
int *q=0; 不合法的初始化:
注意点
1、多个指针变量可以指向同一个地址 int a = 5;
2、指针的指向是可以改变的
3、指针没有初始化里面是一个垃圾值,这时候我们这是一个野指针, 如果操作一个野指针
1)可能会导致程序崩溃
2)访问你不该访问数据 所以指针必须初始化才可以访问其所指向存储区域
|