首页 > 其他分享 >空指针、野指针和const修饰指针的区别

空指针、野指针和const修饰指针的区别

时间:2024-03-25 18:33:47浏览次数:21  
标签:const 常量 指向 int 修饰 指针

关键:空指针和野指针都不允许访问,否则会报错。

空指针

指向变量中内存编号为0的空间

用途

1.初始化指针变量,并且空指针指向的内存不能进行解引用

int main() {

	//指针变量p指向内存地址编号为0的空间
	int * p = NULL;

	//访问空指针报错 
	//内存编号0 ~255为系统占用内存,不允许用户访问
	cout << *p << endl;

	system("pause");

	return 0;
}

野指针

指针变量指向非法的内存空间

int main() {

	//指针变量p指向内存地址编号为0x1100的空间
	int * p = (int *)0x1100;

	//访问野指针报错 
	cout << *p << endl;

	system("pause");

	return 0;
}

总结:野指针和空指针都不是我们自身申请的空间都不允许访问。

const修饰指针

分辨常量指针和指针常量的方法:通过名字来记忆,常量——const,指针——*,所以在记忆时可以看 ∗ * ∗在const前还是后,将const和 ∗ * ∗按顺序读出来即可。

  1. const修饰指针 —— 常量指针——指向可以改,指向的值不可以改
  2. const修饰常量 —— 指针常量——指向不能改,指向的值能改
  3. const即修饰指针,又修饰常量
int main() {

	int a = 10;
	int b = 10;

	//const修饰的是指针,指针指向可以改,指针指向的值不可以更改
	//自己的理解方式  *p1 相当于解引用,获取的是对应的值,因此const修饰后,那么对应的值就不能改,反之指向可以改
	const int * p1 = &a; 
	p1 = &b; //正确
	//*p1 = 100;  报错
	

	//const修饰的是常量,指针指向不可以改,指针指向的值可以更改
	//const直接修饰 p2,即修饰指针为常量,而指针代表指向的内存地址,所以经const修饰后指向不能改,而指向的值可以改。
	int * const p2 = &a;
	//p2 = &b; //错误
	*p2 = 100; //正确

    //const既修饰指针又修饰常量
    
	const int * const p3 = &a;
	//p3 = &b; //错误
	//*p3 = 100; //错误

	system("pause");

	return 0;
}

标签:const,常量,指向,int,修饰,指针
From: https://blog.csdn.net/MATLAB_xiaobai2/article/details/137013694

相关文章

  • c语言(1.指针、2.回调函数)实现简易计算器
    一级标题:简易计算器的实现。二级标题:代码中运用的知识在这里我会使用函数数组指针与回调函数分别写一份简易计算器的代码;那么函数数组指针与回调函数是什么呢?1、函数数组指针,形如intint(p[5])(int,int)的代码就是函数数组指针,p就是函数名,函数类型为int([])(int,int),其......
  • constant-current-diode
    导航(返回顶部)1.简介1.1内部结构1.2它是如何工作的1.3属性2.LED绝配?2.1应用LED案例!2.2恒流二极管测量注意事项3.恒流二极管产品统计3.1currentregulatingdiode3.2产品统计分析3.3主流产品3.4更多产品来源1.简介 1.1内部结构 1......
  • 指针的大小判别;
    目录代码1:代码2:代码3:代码4:代码5:代码6:代码1:#include<stdio.h>intmain(){ inta[]={1,2,3,4}; printf("%d\n",sizeof(a));//16a是数组名;计算的是整个数组大小; printf("%d\n",sizeof(a+0));//4a+0是首元素地址; printf("%d\n",sizeo......
  • C++智能指针
    为什么需要智能指针对于普通指针,在程序结束前我们需要将每个指针都进行free,以免造成内存泄漏。但是手动释放指针是麻烦的,并且一旦漏掉就会造成内存泄漏。因此在C++11中引入智能指针避免此种情况的发生。智能指针包括std::shared_ptr/std::unique_ptr/std::weak_ptr,需要使用头文......
  • non constant or forward reference address expression for section .ARM.extab 错误
    编译时报错:FAILED:STM32F103RET6_Test001.elfcmd.exe/C"cd.&&D:\ProgramFiles\gcc-arm-none-eabi\bin\arm-none-eabi-gcc.exe-g-Wl,-gc-sections,--print-memory-usage,-Map=D:/ProjectCode/CLion/test/STM32F103RET6_Test001/cmake-build-debug-arm-......
  • C++开发基础——指针与引用
    一,关于指针1.指针的基础概念指针是可存储地址的变量,存储在指针中的地址可以是变量或者其他数据的地址。指针不仅仅是指向某地址,指针还关注指向该地址的数据类型。例如:long*num_ptr{};这里的num_ptr指针今后只能存储long类型的变量地址,尝试用它存储非long类型的变量地址......
  • 指针的学习
    .指针:一个变量的地址指针变量:存放指针(变量地址)的变量& 取变量的地址单目运算符*取指针所指向变量的内容int*i_point,i; i=10; i_point=&i; printf("%x\n",&i);//变量对其取地址结果62fe14 printf("%x\n",&i_point);//对指针变量取地址,指针变量也需要空间存......
  • 指向结构体类型数据的指针
    一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量.用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。1指向结构体变量的指针下面通过一个简单例子来说明指向结构体变量的指针变量的......
  • 基础算法--双指针练习总结
    Acwing部分练习:799.最长连续不重复子序列暴力未AC(53points):#include<iostream>usingnamespacestd;constintN=1e5+5;intn,a[N];boolcheck(intl,intr){for(inti=l;i<=r;i++){for(intj=i;j<=r;j++){if(i!=j&&a[i]==a[j]){......
  • const [increaseBigCats, increaseSmallCats] = useCatStore( (state) => [state.incr
    const[increaseBigCats,increaseSmallCats]=useCatStore((state)=>[state.increaseBigCats,state.increaseSmallCats],shallow);这段代码是在使用zustand这个React状态管理库。zustand提供了一种简洁的方式来创建可复用的状态存储,并允许组件通过hoo......