初阶指针--跟着鹏哥,学习C语言打卡第五天!!

本文概述了指针的基础知识,包括指针的定义、初始化、解引用操作,以及数据类型对访问权限和跨度的影响。讨论了野指针、空指针和指针运算的特点,介绍了二级指针和数组指针的概念。重点讲解了指针运算与整数的关系和数组内指针的特殊性质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天学指针,做事容易走神,终于看完了一集

认真对待每一天,时间才会多起来,下次还是去自习室学习比较好,氛围决定心态和效率


指针的定义

今天学习指针。

指针,初始化后,它会在寄存器上开辟一个新的地址,存放着指向的地址,并有访问权限,除了0。和变量类似,变量是开辟新地址,里面放着变量。


定义的格式:

int a=0; int *str=&a; 


操作指针的方法

str就是我们定义的指针,本身是个地址(和数组名字等于首元素的地址,有点类似,和字符串首元素就是字符串起始地址类似),指向了a的地址,存放了a的地址。

&,&a相当于取了a的地址

str此时是指针,其地址不等于a的地址,里面存放着a的地址

解引用  * (星)

当然str只能表示地址,那知道了地址,就得看看地址里面放了东西,或者说对这个地址有了操作的权限,叫做解引用,解引用是一个操作字符,所以需要一个字符 * 代表着解引用这个操作。


指针变量定义

*str是一个指针变量,也是一个对地址进行解引用的操作,简单地说就是看看地址里面的东西,也就是看到了a里面的东西。所以*str能通过地址看到里面存放的值


指针的意义

鹏哥的视频里面说到,指针的两个意义

1、定义指针的数据类型,决定了这个指针的访问权限

2、定义指针的数据类型,决定了这个指针的跨度

  数据类型决定了指针的访问权限,这里指针的char型只能改变一个字节

  数据类型决定了指针的跨度,这些加一,访问的地址不同


野指针问题

三种(基本都是无权限访问的原因)

1、指针未初始化(不知道指向谁,指向随机值,未定义,则不管指向谁,都是无权限的)

2、指针访问越界(定义的范围内,没有这个地址,访问到就是权限越界)

3、指针指向的变量已被释放(指针指向的变量函数返回值的局部变量,这个变量是栈区的,也就是,暂时存储的,释放掉空间时,造成访问越界)


空指针

int *str=NULL

空指针指向 (void*)0,指向 地址0,但是指向地址0,不代表有其访问权限(系统不允许的地址访问)


指针的运算

这里很经典,首先和大家说下指针和整数的加减关系,这里的关系与之前提到的指针意义,数据跨度相关。

指针 +\- 整数

访问到地址的跨度,由数据类型来决定,比如 

int a = 1;
int *str = &a;
char *abc = &a;
printf("%d",str+1);
printf("%d",abc+1);

abc跨度只有1字节,str跨度有4字节,和数据类型相关,当然这里就算加一,也不代表有权限,因为初始化的时候,并未说明,我们只能看到加以后的地址。

指针 +\- 指针(在数组里)

指针和指针进行加减操作,只能在同一空间里的。数组就是一些元素的集合,C语言的里指针指向数组,代表着获得访问权限是数组里所有的地址的权限,当然只要加减不要离开数组地址意外的访问,基本都可以随便加减,这里加减,很多人会想到为啥不是288881484与288881448相减等于36呢?指针加一都是显示地址的,为啥这里是序号相加减呢?

在指针的加减里,就是地址之间的加减以跨度为单位计算(个人理解)

学完整个课程,再来回顾

指针运算关系

允许  与  存放的地址之后的地址作比较,不能 与 存放的地址之前的地址作比较


二级指针

int a=10;

int *p=&a;

int **pppp=p;

 大概就是这个意思*pppp=&p,**pppp=10


[ ] 操作字符

今天还学到了 [ ]这个操作字符,arr[10]

arr[0]=*p,arr[1]=*p+1,*p+1=*1+p,*p+1=*(1+p),1[arr]=*1+p,关系都相等,在低层里[ ]会自动转换来识别

	int arr[10] = { 0,2,3,0,0,6,7,8,9,0 };
	int* p = arr;


 指针数组

今天还认识了指针数组这个概念,就是开辟一系列的存储地址,里面存放的一系列的指针int*arr[10];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值