【C语言】指针相关内容详解

指针

指针是什么
在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。可以说,地址指向该变量单元。指针就是一个变量,存放内存单元的地址(编号)
对应到代码

int main()
{
	int a = 10; //在内存中开辟一块空间
	int* p = &a;  //对变量a用&操作符取出它的地址,将a的地址存放在变量p中,p就是一个指针变量
}

指针的大小在32位平台上就是4个字节,在64位平台上就是8个字节
指针的定义方式:
type+*

指针和指针类型

我们都知道变量有不同的类型,整型、浮点型等,那指针有没有类型呢?准确的说:有
指针类型的意义:

int main()
{
	int n = 10;
	char* pc = (char*)&n;
	int* pi = &n;
	printf("%p\n", &n);
	printf("%p\n", pc);
	printf("%p\n", pc + 1);
	printf("%p\n", pi);
	printf("%p\n", pi + 1);
}

在这里插入图片描述
通过上例我们可以看出,指针的类型决定了指针向前或向后走一步有多大(距离)

指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字符)。比如:char的指针引用就只能访问一个字节,而int的指针解引用就能访问4个字节

野指针

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

  1. 指针未初始化
int* p;//此时的p就是野指针
  1. 指针越界访问
int mian()
{
	int arr[6] = { 0 };
	int* p = arr;
	int i = 0;
	for (i = 0; i < =7; i++)
	{
		*(p++) = i;
		//当指针指向的范围超出数组arr的范围时,p就是野指针
	}
}

如何规避野指针:

  • 指针初始化
  • 小心指针越界
  • 指针指向空间释放即设置NULL
  • 指针使用之前先检查有效性

指针数组

指针数组是数组还是指针?答案是数组,是存放指针的数组

int* arr[3]; //arr是一个数组,有3个元素,每个元素是一个整形指针

指针与数组

在上篇文章中,也提到数组名就是首元素的地址,也举例说明
那么既然可以把数组名当成地址存放到一个指针中,而且数组在内存中是连续存放的,我们就可以用指针来访问数组。

void Init(int* arr, int sz)//数组作为实参,可以用指针接收 
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		
		arr[i] = i;
	}
}
int main()
{
	int arr[10] = { 0 };
	int sz = sizeof(arr)/sizeof(arr[0]);
	int i = 0;
	Init(arr,sz);
	for (i = 0; i < sz; i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值