C语言中的指针-1
指针的定义
指针是一种数据类型,使用它可以定义指针变量,这种变量存储的是整数,代表了内存的编号,每个整数是一个字节,使用指针变量可以访问对应的内存,具体访问几个字节,由指针变量的类型决定。
指针的使用场合
首先我们要注意的是指针变量理论上可以访问内存的任何位置,但实际上我们有权限访问的内存不多,乱用指针很容易产生段错误。
1.函数之间共享局部变量:
由于全局变量浪费内存,还可能造成命名冲突,因此不适合大规模使用。
而函数传递默认是值传递,无法共享,所以指针是共享局部变量的最佳选择。
2.提高函数的传参效率
函数传递默认是值传递也就是拷贝内存,当变量字节数较多时,传递变量的时间会变长,而使用指针是传递变量的地址只需要4或者8字节即可,大大提高了效率。
3.配合堆内存使用
堆内存无法取名即不能与标识符建立映射关系,因此必须与指针配合使用
如何使用指针
定义指针变量: 类型 指针变量名;*
? 1.由于指针变量的用法和普通变量不同,为了避免和普通变量混淆,指针变量一般以p结尾
? 2.指针变量不能连续定义
int* p1,p2;
int* p1,*p2;
? 3.指针变量与普通变量一样默认值是随机的,为了安全一定要初始化,如果不知道赋什么值可以赋值为NULL
? 4.指针的类型决定了访问内存的字节数
指针变量的赋值
1.用变量的地址赋值:p = &num ;
*2.用堆内存的地址赋值:p = malloc(sizeof(p));
*指针变量的解引用:指针变量
通过指针变量中存储的内存编号去访问内存,具体访问多少字节由指针变量的类型决定。
该过程可能产生段错误
指针的运算:
指针变量中存储的是整数,理论上整型数据能使用的运算符,指针变量都能使用,但只有一下运算才有意义:
指针+n <=> 指针+(n*字节数)
指针-n <=> 指针 -(n*字节数)
指针 - 指针 <=> (指针-指针)/字节数 只有相同类型的指针才可能相减。
指针与const
const int* p;
int const *p;
int* const p;
const int* const p;
int const *const p;
void指针
1.以1字节为单位移动
2.不能解引用
3.可以与任何类型的指针自动类型转换(c语言)
4.一般用作函数的参数、返回值
|