重要内容:指针

指针的概念:

1.指针就是地址,地址就是内存编号。
2.指针也是一种数据类型:其就叫做指针类型(指针类型占8个字节)
作用:用来存放地址编号。(==专门来处理地址数据)

指针变量:

定义;

结构:数据类型 变量名(结构和普通类型的变量的构成相当相似)

与普通变量的特殊点:

基类型 * 指针变量名
(1.其中基类型有:整形,浮点型,字符型,数组型,结构体,函数类型
//其基类型指的是该指针所存放空间首地址后所代表的数据是什么类型的。
//相当于是知道了从空间那个位置开始读数据,然后知道一个数据占几个字节
//(相当于对于首地址的偏移量是多少,然后就可以精准的读准数据)2.*:其使用时指的是此时定义的是一个指针类型的变量。
(3)指针变量名:标识符的命名规则。

eg: 
int *p;
float *p;
double *p; //等等

2.指针类型:

int *p //其中 int * 是其数据类型

3.指针的引用:

使用eg:
int *P;
int a =10;
p = &a;//取a的地址然后放到p中

* //指针运算符
  //单目运算符
  //运算对象:只能是指针

*p://表示访问指针p所指向的基类型的内存空间
	//间接访问
	//如果通过a访问,则叫做直接访问

应用的具体过程:
step1:首先拿出p中的地址,到内存中定位
step2:偏移出sizeog(基类型)大小的空间
step3:将偏移出的空间,当作一个基类型变量来看(这就是*p的运算结果,*P的运算相当于一个基类型的变量)

指针变量的初始化:

int *p;
printf("%d",*p);//该程序可能会报错

如果指针变量没有进行初始化,则此时是随机值。也将该类指针叫做野指针。
上方报错原因:因为没有给定义的指针变量初始化,但其确实开了一个8位的空间出来,其中系统就将这八位空间里的数据当作是地址来尽心使用,原则上可以访问这个随机地址指向的数据,但是不确定指向的空降是否能被访问,所以建议在指针定义时进行初始化,让它有一个明确的指向。

指针的赋值:

int a,b;
int *P;
int *p1 = &b;
对于赋值的两种写法:
p = &a;//给指针p赋a的地址
p = p1;//通过指针p1间接给p赋值b的地址。

指针的作用:

能够使被调修改主调。(被调用函数直接定位变量空间来修改变量的值)

实现被调更改主调的方法:

形参:指针类型变量,用来接收实参(实参是要操作的内存空间的地址)
实参:要修改谁,就把谁的地址传过去
要保证空间有效
注意:被调函数中一定要有*p运算(间接访问所指向空间)

调用函数的两种参数传递类型:

值传递:只是实参数据赋值了形参
地址传递:传的是地址——由此才可以被调修改主调。


😄
😄

指针 + 一维字符数组

数组回顾:
int a[5] //一位整形数组
			//数组名
			//类型——数据类型为 int[5]
			//值——数组首元素的地址——是常量(因此在指针运算之中不能用a来进行自增或自减运算)

要用指针结合数组首先要考虑两个问题:
1.谁能代表数组空间的首地址:

int *P = a;//a的值存的就是首地址
或者
int *p = &a[0];//取数组第一个元素的首地址

2.要定义什么类型的变量:
看数组内部元素的类型——相应的设置指针的基类型

指针的运算:

指针的加法运算:

int a[10];
int *p = a;
printf("%d",p+1);//其中p+1就相当于数组的a[1]元素

由以上例子我们可以理解:对指针做加1运算相当于是从指针所值的地址空间往后推了一个指针的基类型所代表的字节数
将其扩展可以理解:

(p+N)—— 整体表示地址定位到从p所指地址开始跳过了N个基类型字节的空间

由此结论可以发现其和数组的关联:

int i = 0;
int a[10];
int *p = a;
for(;i < 10;i++)
{
	printf("%d",*(p+i)); //该代码的含义是通过指针间接访问来打印数组
}
其中:
*(p+i) == a[i] == i[a]//三者等价。i[a]形式是合法的,因为[]是一个下标运算符,a[i]相当于*(a+i)的效果,所以i[a]也是相当于*(i+a);

指针的关系运算:

指针的关系运算原理:(关系运算符有哪些见之前的博客)
通过比较地址编号的大小来进行关系判断

指针的减运算:

两个相同类型的指针相减表示其两地址之前相差了几个基类型对应的空间字节数。

利用数组来理解更为方便:
int a[10] ={1,2,3,4,5,6,7,8,9,10};
int *p = a;
int *q = &a[9];
printf("%lp",q-q)//其代码执行的结果9,其代表的就是a[9]与a[0]相差的元素个数。

注意事项:

指针与指针的加除乘等运算都没有实际意义,所以一般不进行。

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值