C语言指针的简单了解

//指针就是变量,用来存放地址的变量。存放在指针中的值被当作地址处理
//不同操作系统为地址划分空间大小
//32位机器有32根地址线,地址用4个字节的空间存储,指针变量大小就为4个字节
//64位机器有64根地址线,地址用8个字节的空间存储,指针变量大小就为8个字节

//指针区分类型的意义:
//所有类型的指针都能够完整存放其它类型的指针数据
//但是在更改该类型的值时,按照该类型修改
//例如 int型修改4个字节的值,而char型只修改1个字节的值
//对指针加减就是将地址向后向前移动该类型大小字节,类型决定指针的步长

//野指针,指向的位置不可控制不可知
//指针在定义时需要对其初始化,不然就是野指针,一定要避免    int* p;
//指针越界,就是访问了不归它管的地址也是野指针            int arr[10];   int* p = arr;  p>>12,错误
//指针指向的内存地址被释放了,也会被归为野指针,一般在指针函数里 

//规避野指针
//1.对指针初始化,可以为空指针NULL = ((void *)0)
//2.防止指针越界
//3.指针使用前检查是否有效
//4.地址被释放了指针置为空指针

//对指针的操作
//指针+-整数    位移
//指针-指针        得到两个指针之间的元素个数(大减小)(同一块空间内的)
//指针位运算

//指针类型的意义
int main()
{
	int a = 0x11223344;
	int b = 0x55667788;
	int* pa = &a;
	char* pb = &b;
	*pa = 0;	//将11223344改为00000000;修改4个字节
	*pb = 0;	//将55667788改为55667700;修改1个字节

	return 0;
}
//指针越界,成为野指针
int main()
{
	//int* pa;		//初始化未定义指针,直接成为野指针
	int arr[10] = { 0 };
	int* p = arr;
	int i = 0;
	for (i = 0; i < 12; i++)
	{
		*p = i;
		 p++;
	}
	return 0;
}
//内存被释放成为野指针
int* test()
{
	int a = 10;
	return &a;		//地址在返回时被释放
}

int main()
{
	int* p = test();   //记住的地址对应的临时变量已经被销毁了
	printf("%d\n", *p);//当再用该地址访问时已经不正确了,可能已经被分配给其它数据了
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值