zoukankan      html  css  js  c++  java
  • 学习:指针

    指针的基本概念:

    指针的作用: 可以通过指针间接访问内存

    内存编号是从0开始记录的,一般用十六进制数字表示 (内存编号0~255是系统占用空间,不允许用户访问)

    可以利用指针变量保存地址


    指针变量的定义和使用
    指针变量定义语法: 数据类型 * 变量名;

    示例:


    指针变量和普通变量的区别:

    普通变量存放的是数据,指针变量存放的是地址,其实个人理解指针对于我们来说也可以认为一个中间人而已,但是这个中间人又不能是普通的变量,因为如果单纯的一个普通变量可以用来存储内存地址的话,那么应该也可以称为类似指针的作用,就是因为指针本身可以用来存放地址,所以是这样。

    指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用

    总结1: 我们可以通过 & 符号 获取变量的地址

    总结2:利用指针可以记录地址

    总结3:对指针变量解引用,可以操作指针指向的内存


    指针所占内存空间:

    提问:指针也是种数据类型,那么这种数据类型占用多少内存空间?

    总结:所有指针类型在32位操作系统下是4个字节


    空指针和野指针:

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

    用途:初始化指针变量

    注意:空指针指向的内存是不可以访问的,原因内存编号0~255是系统占用空间,不允许用户访问

    int main() {
    
    	//指针变量p指向内存地址编号为0的空间
    	int * p = NULL;
    
    	//访问空指针报错 
    	//内存编号0 ~255为系统占用内存,不允许用户访问
    	cout << *p << endl;
    
    	system("pause");
    
    	return 0;
    }
    

    野指针:未申请访问受限内存区域的指针

    int main() {
    
    	//指针变量p指向内存地址编号为0x1100的空间
    	int * p = (int *)0x1100; //这句话不理解可以参考https://www.cnblogs.com/doitjust/p/11318208.html
    
    	//访问野指针报错 
    	cout << *p << endl;
    
    	system("pause");
    
    	return 0;
    }
    

    总结:空指针和野指针都不是我们申请的空间,因此不要访问

    疑惑:这里的话'野指针'自己不懂,那如果自己想要自定义的申请空间那要怎么申请呢??


    const修饰指针:

    const修饰指针有三种情况:

    const修饰指针 --- 常量指针
    const修饰常量 --- 指针常量
    const即修饰指针,又修饰常量

    int main() {
    
    	int a = 10;
    	int b = 10;
    
    	//const修饰的是指针,指针指向可以改,指针指向的值不可以更改
    	const int * p1 = &a; 
    	p1 = &b; //正确
    	//*p1 = 100;  报错
    	
    
    	//const修饰的是常量,指针指向不可以改,指针指向的值可以更改
    	int * const p2 = &a;
    	//p2 = &b; //错误
    	*p2 = 100; //正确
    
        //const既修饰指针又修饰常量
    	const int * const p3 = &a;
    	//p3 = &b; //错误
    	//*p3 = 100; //错误
    
    	system("pause");
    
    	return 0;
    }
    

    记忆技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量

  • 相关阅读:
    关于多个EditText的OnTextChange事件陷入死循环的处理
    #define #include #undef的其中一个用法(目的)
    串行移位锁存并行输出可级联器件74HC595
    STM32F10xx CAN BUS相关库文件"stm32f10x_can.c"内的库函数解析
    STM32 之 NVIC(中断向量、优先级) 简述
    STM32F103xx bxCAN(Basic Extended CAN) 滤波机制
    VS上利用C#实现一个简单的串口程序记录
    如何去各型MCU的官网上下载正确的数据手册
    Cotex-M3内核STM32F10XX系列时钟及其配置方法
    Stm32 debug停留在"BKPT 0xAB"或者"SWI 0xAB"的解决办法。
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/11841223.html
Copyright © 2011-2022 走看看