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

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,说明指针常量可修改内容,但不可更改方向。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值