从零开始的c语言#指针初阶01

##从零开始的c语言#指针初阶01

1. 什么是指针
指针是编程语言中的一个对象。
指针是内存中一个最小单元的编号,也就是地址(一个小的单元是一个字节)
口语所说的指针,通常是指针变量,是用来存放内存地址的变量
一个标准的指针
指针的大小在32位平台是4个字节,在64位平台上是8个字节(32个bit位为四个字节,64个bit为八分字节)

2. 指针的类型

三种不同类型的指针变量
运行的结果
指针的类型不同但是他们所占的空间都是八个字节
(在32位平台是4个字节,在64位平台上是8个字节)

在这里插入图片描述
不同指针类型决定了指针向前或者向后走一步有多大
(一个单元是一个字节,int是整形,开辟了四个字节的空间,char是字符,开辟了一个字节的空间
所以int表示向前或者先后四步,char表示向前或者先后走一步)
不同指针的访问权限不同
例如一个int的变量放到char类型里面去的话就只能访问一个字节
在这里插入图片描述
在这里插入图片描述
1.int
是一个整形一个整形的去访问(即四个字节为一组)
2.char*是一个字符一个字符的去访问(即一个字节为一组)

总结:
1.指针类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)
(比如:char的指针解引用就只能访问一个字节,而int的指针的解引用就能访问四个字节)
2.指针类型决定了,指针向前或者向后走一步有多大
(指针向前或者向后走一步有多大,与指针类型所对应开辟的空间有关)

4.野指针
野指针的概念:野指针就是指针指向的位置是不可知的(随机的,不正确的,没有限制的)

指针未初始化和指针访问越界
空间释放

野指针成因:
1.指针未初始化(局部变量不初始化的话,默认是随机值)
2.指针访问越界
3.指针指向的空间释放(指针指向一个放在自定义函数的变量的时候,当函数返回后函数中变量所开辟的空间释放)

指针初始化
要注意指针的初始化(当前不知道p应该初始化为什么地址的时候,直接初始化为NULL)
NULL
(NULL表示的意思是0)
规避野指针
如何规避野指针:
1.指针初始化(当前不知道p应该初始化为什么地址的时候,直接初始化为NULL)
2.小心指针越界(编译器指针越界以后是不会提醒的)
3.指针指向空间释放即使置NULL
4.在使用指针之前检查有效性

5.指针的运算

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	int* pend = arr + 9;
	while (p <= pend)
	{
		printf("%d", *p);
		p++;
	}
	return 0;
}

指针的±整数(与指针的类型有关)

指针减指针
指针-指针
得到的是两个指针之间的元素个数

在这里插入图片描述
指针相减的前提是两个指针指向同一个空间(指针的相加无意义)

**

6.指针和数组

**
1.数组名表示的是数组首元素的地址

在这里插入图片描述
2.指针数组及用来存放指针的数组

7.二级指针
二级指针
pa是指针变量,一级指针(只有一层指向关系)
pa也是变量,&pa取出pa在内存中的起始地址
ppa就是一个二级指针变量(ppa有两层指向关系)
在这里插入图片描述
a的地址存放在pa中,pa的地址存放在ppa中。
pa是一级指针,而ppa是二级指针

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值