指针与数组及const修饰指针

指针及指针与数组及const修饰指针什么是指针?指针是一个值为地址的变量,形如int* p=&a;通过这个简单的例子我们可以清楚指针的四个部分:指针的类型int *、指针所指向数据的类型int、指针的值&a即a的地址、指针本身所占据的内存区。而机器中地址的长度是固定的,所以指针的长度是确定的,也就是说,int * 、char *、double *类型的指针都是相同长度的内存大小,用函数sizeof(p)测一下,64位下指针占据8个字节的长度。使用指针这里只谈谈最基础的指针初始化、赋
摘要由CSDN通过智能技术生成

指针及指针与数组及const修饰指针

什么是指针?

指针是一个值为地址的变量,形如int* p=&a;通过这个简单的例子我们可以清楚指针的四个部分:指针的类型int *、指针所指向数据的类型int、指针的值&a即a的地址、指针本身所占据的内存区。

而机器中地址的长度是固定的,所以指针的长度是确定的,也就是说,int *char *double *类型的指针都是相同长度的内存大小,用函数sizeof(p)测一下,64位下指针占据8个字节的长度。

使用指针

这里只谈谈最基础的指针初始化、赋值与解引用问题。

在上面那个例子中,我们在声明指针的时候一起初始化了,那是不是声明了指针就一定要初始化?当然不是,定义一个指针可以不用初始化,但是在解引用指针时一定要确定它是否被初始化即是否指向了某一个确定的可访问的内存位置。

//错误原因,p未初始化,指向一个非法地址
int* p;//int* p=&a;
*p=200;

初始化为空指针NULL

指向内存编号为0的空间,操作该内存空间会报错,一般情况NULL指针用于程序条件判断。

int* p=NULL;
...
if(p != NULL){
   
    free();
}  

万能指针

使用void *当操作内存空间时需要转换成对应类型,告知需要操作的内存大小。

int a=10;
void* p=&a;
*(int *)p=100;
printf("%d\n",*(int *)p);

const 修饰指针

1、通过指针修改const修饰的常量

//这种方式不安全,可以通过指针修改
const int a=10;
int* p=&a;
*p=100;//修改后a和*p都变为100

2、指针常量和常量指针

常量指针–“the pointer to const”即指向常量的指针const 在 * 之前

const int * p or int const * p

常量指针本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了一个常量。

int a=10,b=100;
const int *p=&a;
p&#
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值