C语言学习笔记

135 阅读2分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」。​

指针

指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑储存器中另一个地方的值,由于通过地址能找到所需的变量单元,地址指向该变量单元,因此将地址形象化的称为“指针”,意思是通过他能找到以他为地址的内存单元。描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。

int main()
{
	int a = 10;
	int* p = &a;//指针变量
	return 0;
}

注:指针就是变量,用来存放地址的变量(存储在指针内的值都当成地址处理)

指针和指针类型

指针类型决定指针进行解引用操作的时候,可以访问空间的大小以及对指针解引用的时候有多大的权限(能操作几个字节)

int p: p可以访问四个字节

char p:p可以访问一个字节

double p :p可以访问八个字节

指针的意义

指针+-整数

int main()
{
	int a = 0x11223344;
	int* pa = &a;
	char* pc = &a;
	printf("%p\n", pa);
	printf("%p\n", pa+1);

	printf("%p\n", pc);
	printf("%p\n", pc+1);
	return 0;
}

int p:p+1 ——>  4*

char p; p+1——> 1*

double*p: p+1——>8

sum: 指针类型决定了:指针走一步走多远(指针的步长)(距离)

野指针

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

1.指针未初始化

int main()
{
	//int a;//局部变量不初始化,默认是随机值
	int* p;//局部的指针变量,就被初始化随机值
	return 0;
}

2.指针越界访问


int main()
{
	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;
	for (i = 0; i < 12; i++)
	{
		p++;
	}

	return 0;
}

当指针指向的范围超过数组arr的范围时,p就是野指针

3.指针指向的空间释放

test()
{
	int a = 10;//局部变量a
	return &a;
}
int main()
{
	int* p = test();
	*p = 20;
	return 0;
}