首页 > 其他分享 >C语言学习笔记 Day9(指针--上)

C语言学习笔记 Day9(指针--上)

时间:2024-08-06 15:24:38浏览次数:6  
标签:变量 指向 Day9 -- C语言 int 地址 常量 指针

Day9 内容梳理:

目录

Chapter 7   指针

7.0 内存的概述

7.1  基础知识(指针&指针变量)

7.2 指针

7.3 指针变量

(1)野指针

(2)空指针

(3)万能指针 void*

(4)const修饰的指针变量


Chapter 7   指针

7.0 内存的概述

存储器:计算机中用来存储程序和数据以便辅助CPU进行运算处理的组件

内存:内部存储器,暂存程序、数据。断电会导致数据丢失。

外存:外部存储器,长时间保存程序、数据。断电不会导致数据丢失。

存储数据分为编码、寻址两步。

编码就是将内存抽象为一个很大的一维数组,对每个字节分配一个编号(编号长度取决于处理器是32位还是64位)。这个编号就是内存地址。

不同数据类型会被分配到不同长度的地址。char占一字节,分配一个地址;int占四字节。分配四个地址等等。

所有的指针类型存储的都是内存地址,而内存地址都是一个无符号(unsigned)的十六进制整型数。

7.1  基础知识(指针&指针变量)

指针是内存单元的编号,指针变量是存放地址的变量。指针是一种数据类型,指针变量是一种变量。指针变量指向谁,就把谁的地址赋给指针变量。

用sizeof()来测量。测出指针大小总是4或8,因为平台是32位(4字节)或64位(8字节);测指针变量的大小,得到指针变量所指向的存储地址的大小

7.2 指针

定义:数据类型* 变量名;     (比如:int* p;)

作用:能通过指针来修改值

(注意:*是取值,&是取地址)

补充:定义指针的类型时,一定要和变量的类型对应上。

例子:

7.3 指针变量

指针变量也是变量,可以被赋值。

将任意数值赋给指针变量,就变成了野指针。

(1)野指针

定义:指针变量指向一个地址已知但存储内容未知的空间。

注意:程序中允许野指针的存在,它本身不会直接引发错误,操作野指针指向的内存区域才有可能导致报错。操作系统将0-255作为系统占用,不允许用户操作。所以如果代码写int* p = 100,就一定会报错,因为这块地址的内容不允许被用户访问。

(2)空指针

定义:内存地址编号为0的空间。(比如  int* p = NULL;)

注意:操作空指针对应的空间一定会报错。

作用:空指针可用作条件判断

(3)万能指针 void*

性质:可以接收任意类型的变量的内存地址

比如:

int a = 10;

void* p = &a;

通过万能指针改变某个量的值,需要先找到它对应的指针类型。

(4)const修饰的指针变量

const的修饰分为两种,一种是指向常量的指针,另一种则是指针常量。

二者区别在于能否修改指针的方向,以及修改被指向区域的内容。

修改被指向区域的内容更改指向
指向常量的指针(比如const int* p)
指针常量 (比如int* const p)

①指向常量的指针

指针指向的区域不可修改,但指针的指向可以变,如下图:

②指针常量

指针的指向不能修改,但是可以更改被指向区域的内容,如下图:

把上图中修改指向的报错先注释掉,运行结果如下:

可以看到a的值从10被改为了100,说明指针常量可修改内容,但不可更改方向。

标签:变量,指向,Day9,--,C语言,int,地址,常量,指针
From: https://blog.csdn.net/m0_75036068/article/details/140956696

相关文章

  • Java Optional容器总结(快速上手图解)
    Java系列文章目录JavaLambda表达式总结文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1引入Optional容器4.1.1引入容器的原因4.2Optional介绍4.3Optional的使用4.3.1关于空值报错的解决方法4.4Optional实践4.4.1为什么使用Option......
  • 声阻抗、比阻抗、阻抗率、特征阻抗、特征阻抗率、流阻、流阻率、比流阻
    1、声阻抗(AcousticImpedance)声阻抗是指声波在介质中传播时,介质对声波产生的阻碍作用,它是介质密度和声速的乘积声阻抗,单位为帕斯卡·秒每米(Pa·s/m)或雷尔(rayl)介质的密度,单位为千克每立方米(kg/m³)声速,单位为米每秒(m/s)声阻抗的概念类似于电阻在电路中的作用,是衡量声波在介......
  • Python 卡在第 1 页
    让它读取下一页结果的最佳方法是什么?目前正在拉取数据,但只有第1页importrequestsimportjsonpage=1url="https://api-prod.grip.events/1/container/4368/search?search=&sort=name&order=asc&type_id=4907,4906,5265,4964,4904,1026,4908&page=%d"headers={......
  • 【技术分享】解决CANoe软件Trace窗口筛选栏空白问题
    引言在汽车电子开发领域,Vector公司提供的CANoe、CANape和CANalyzer软件是我们不可或缺的工具。然而,近期一些用户在更新了Windows系统后,遇到了Trace窗口筛选栏变白的问题。本文将分享一个实用的解决方案,帮助您快速恢复软件功能。问题描述7月11日,Windows系统推送了新的更新。......
  • 汇川EC总线伺服简单使用只要关注这几个参数就够了
    目录H02基本控制参数H03端子输入参数H04端子输出参数H09自调整参数这些参数都可以通过汇川的伺服调试软件,或者是伺服驱动器面板上的按键来进行设置H02基本控制参数H02-01绝对值系统选择根据当前系统选择是增量模式还是绝对值模式H02-02旋转方向选择选择......
  • 神-从零构建大模型,尚未发布,GitHub标星22k。
       从零构建大模型-即将于今年10月底发布的书籍,github已经吸引了惊人的21.7k标星!作者是威斯康星大学麦迪逊分校的终身教授,在GitHub、油管、X上拥有大量粉丝,是一位真正的大佬。免费获取:神-从零构建大模型,尚未发布,GitHub标星22k!!内容截图......
  • Linux系统打包Qt
    因为使用了QWebEngineView,所以遇到了打包问题,记录一下我的失败过程。等以后有机会再接着弄吧目前知道的打包方式有三种:1.linuxdeplot+linuxdeploy-plugin-qt2.linuxdeplotqt+appimagetool3.使用脚本,收集ldd显示的依赖库 第一种(linuxdeplot+linuxdeploy-plugin-qt),......
  • 免费文档管理工具:哪些值得一试?
    国内外主流的10款免费文档软件对比:PingCode、Worktile、OpenDocMan、Papermerge、Nuxeo、OpenKM、Teedy、Confluence、飞书文档、腾讯文档。在寻找合适的文档软件时,许多人都面临一个共同的挑战:成本。尤其是小企业和个体创业者,高昂的软件许可费往往成为一个不小的负担。幸运的是......
  • 【2024-08-04】连岳摘抄
    23:59我很累,但我还可以为国再打3个小时。                                                 ——郑钦文一个人遇上了不及格的妈妈,或者遇上了妈妈的不及格时刻,这也是常......
  • 铁威马教程丨无法在网络中搜索到我新买TNAS?
    适用型号:所有TNAS型号故障现象:新购买的TNAS设备并未安装系统,您首先要将新买的TNAS设备经过初始化,并安装TOS系统才可以正常使用。在初始化系统前,您需要获取到TNAS设备的IP地址,并在电脑浏览器(推荐使用谷歌浏览器或者苹果Safari)的地址栏中输入TNAS设备的IP地址以访问系统的......