自学C day11-指针

指针和内存单元

内存单元:计算机中内存最小的存储单位,大小是一个字节
指针:就是地址

定义和使用

int a = 10int *p = &a;

初始化必须是用地址给它初始化
使用:*p = 250 //指针的解引用/间接引用
*p:将p 变量的内容取出,当成地址看待,找到该地址对应的内存空间
如果做左值:存数据到空间中
如果做右值:取出空间中的内容

野指针、空指针

void *:万能指针/泛型
指针的大小与类型无关,只与当前使用的平台架构有关
为了杜绝野指针,有了空指针

int *p = NULL

....

if(p != NULL){
*p = 300;
printf(xxxxxx)
}

*p时p对应的存储空间一定是一个无效的访问区
野指针:1、没有一个有效的地址空间的指针

int *p;
*p = 1000;

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C4700	使用了未初始化的局部变量“p”	day05	c:\users\administrator\documents\visual studio 2015\projects\day05\day05\野指针和空指针cpp.cpp	11	

2、p变量有一个值,但该值不是可访问的内存区域

int *p = 10;
*p = 2000;

0-255这块地址是确定留给操作系统的,会出现写入权限错误
指针必须要用地址来赋值
【杜绝野指针】

泛型指针void *

数组和指针

数组名是地址常量——它不可以被修改,也就是说不可以被赋值
指针是变量,可以用数组名给指针赋值

取数组元素:a【2】本质上就是*(a+2)
取数组元素

int *p
int arr[] = {1,3,5,7,9}
arr[0] == *(p+0) == p[0]  ==*(p+0)

const修饰指针

	const int a = 5;

	int *p = &a;
	*p = 650;

const int p;
可以修改p,但是不能修改
p
int const p;
同上
int * const p;
可以修改
p,但是不能修改p
const int *const p;
两个都不能改了
总结:const向右修饰,被修饰的部分即为只读
常用在函数形参内,用来限制指针所对应的内存空间为只读

指针和数组区别

1、指针是变量,数组是常量
2、sizeof(指针) ==> 4/8 取决于平台
sizeof(数组) ==》数组的实际大小
3、指针++的操作:
a[0] == *(a+0)这里的a是常量是不动的,所以要取元素的话,得向后移
int *p = a;
*p == (p+0) == p[0] == a[0]
p++ p是变量,是可以动的,p++了之后就指向了下一个元素,要取出来的话直接
p就行了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值