MOOC笔记--指针

指针的应用场景:

  1. 函数返回多个值,有些值就只能通过指针传回
  2. 传入的参数实际上是需要保存带回的结果的变量
    在这里插入图片描述
  3. 函数返回运算的状态,结果通过指针返回
    常用的套路是:让函数返回特殊的不属于有效范围内的值来表示出错:-1,0(文件)
    但是当任何数值都是有效的可能结果时,就得分开返回了:函数的return返回状态(是否运行成功),指针参数返回实际的值,这样的好处是能把函数的返回放到if语句里。
    在这里插入图片描述
    注意第13行,if(divice(a,b,&c)使用的返回值
  4. 动态申请的内存

最常见错误

定义了指针,还没指定任何变量,就开始使用指针
即,不能对悬浮指针直接赋值,像

int *p;
*p=12;	//错误,因为还没有任何指向,程序容易发生崩溃

指针运算

在这里插入图片描述
p++:先取出p所含有的东西,再把p++
两个指针相减表示的是:这两个地址之间所能存放的数据个数,即:地址只差/sizeof((当前类型))
在这里插入图片描述
指针比较:地址的比较在这里插入图片描述
用NULL表示0地址:
在这里插入图片描述

int *p=NULL;	//初始化指针用NULL

在这里插入图片描述
void*指针:
在这里插入图片描述

char *a[]的使用: 在这里插入图片描述

注:二维数组中第二个括号里要求填入具体数字,第一个括号里可以不填

const的问题:

1.所指是const:表示不能通过这个指针去修改那个变量(并不能使得那个变量成为const)

const int *p=&i;
*p=26;//error!(*p)是const
i=26;//ok
i++;//ok
p=&j;//ok
//i是可以变化的,p也可以指向其他的地址,但是不能通过p去修改所指地址的值

判断哪个被const了的标志是:const在*的前面还是后面

int i;
const int* p1=&i;//(1)
int const* p2=&i;//(2)
int *const p3=&i;//(3)
//(1)(2)其实是一样的,const在*前面,表示指向的值不能修改
//(3)const在*后面,表示指针不能被修改

猜你喜欢

转载自blog.csdn.net/weixin_45454859/article/details/103256344
今日推荐