从零开始学C语言系列之第八章《const 与指针》

往期回顾

1.【第一章】《认识C语言》
2.【第二章】C语言概述及基本知识1
3.【第二章】C语言概述及基本知识2
4.【第三章】字符串和格式化输入/ 输出
5.【第三章】 printf
6.【第三章】 scanf
7.【第三章】 putchar
8.【第三章】 getchar
9.【第三章】 sizeof
10.【第三章】 strlen
11.【第三章】 define
12.【第四章】运算符第一节
13.【第四章】运算符第二节
14.【第四章】运算符第三节
15.【第四章】运算符第四节
16.【第四章】类型转换
17.【第四章】函数与转化
18.【第五章】while
19.【第五章】for开篇
20.【第五章】for的灵活性
21.【第五章】逗号运算符
22.【第五章】do while
23.【第五章】循环选择
24.【第六章】if
25.【第六章】else if
26.【第六章】break
27.【第六章】continue
28.【第六章】break和continue的区别与作用
28.【第六章】switch
29.【第七章】函数复习
30.【第七章】函数参数
31.【第七章】函数中返回值
32.【第七章】递归
33.【第七章】指针引入
34.【第七章】指针简介
35.【第七章】指针简介2
36.【第八章】数组
37.【第八章】数组2
38.【第八章】多维数组
39.【第八章】指针与数组
40.【第八章】函数 数组 与指针
41.【第八章】使用指针形参
42.【第八章】指针操作
43.【第八章】const入门



const 回顾

我们在前面使用 const 创建过变量:

const double Pl=3.14159;

修饰局部变量:

const int n=5;
int const n=5;

​   这两种写法是一样的,都是表示变量n的值不能被改变了,需要注意的是,用const修饰变量时,一定要给变脸初始化,否则之后就不能再进行赋值了。

​   虽然用#define 指令可以创建类似功能的符号常量,但是const 的用法更加灵活。可以创建 const数组、const指针和指向 const的指针。

const int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};

如果程序稍后尝试改变数组元素的值,编译器将生成一个编译期错误消息:

days[9]= 44;	/*编译错误 */

这分为常量指针和指针常量

最主要看const的位置

// 常量指针
const int * n;

// 指针常量
int const * n;

常量指针

1、常量指针说的是不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。

int a[5]={5,2,3,5};
const int* n=&a;

那什么叫不能通过这个指针改变变量的值呢?

// n 指向的 int 类型的值声明为const,这表明不能使用 n 来更改它所指向的值:
*n = 29; // 这样是违法操作
n[2] = 29; // 这样是违法操作   

那什么叫可以通过其他的引用来改变变量的值呢?

a[0] = 20; // 允许,因为a 并未被const限定

在举个其他例子:
在这里插入图片描述

2、常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。

int a=5;
int b=6;
const int* n=&a;
n=&b;

指向const的指针通常用于函数形参中,表明该函数不会使用指针改变数据。

void show array(const double *ar,int n);

​   关于指针赋值和 const 需要注意一些规则。首先,把const 数据或非const 数据的地址初始化为指向const的指针或为其赋值是合法的:
在这里插入图片描述
然而,只能把非const数据的地址赋给普通指针:
在这里插入图片描述
这个规则非常合理。否则,通过指针就能改变const数组中的数据

指针常量

  指针常量是指指针本身是个常量,不能在指向其他的地址

  需要注意的是,指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向改地址的指针来修改。

int a=5;
int *p=&a;
int* const n=&a;
*p=8;

理解

/*
可以将指针拆分成 如:
*p       p      &p
结引值	   值     地址
这三个部分

常量指针, 指的是整个地址(3部分是个常量),但是他的值还是可以改变的,所以说他的空间是不能变的

指针常量   指的是整个地址(2部分是个常量),但是他的接引值还是可以改变的

在这里插入图片描述
如果实在不懂可以再看看这个:

【指针】const和指针_哔哩哔哩_bilibili
在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-05 20:46:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-05 20:46:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-05 20:46:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-05 20:46:03       18 阅读

热门阅读

  1. 外界的声音都是参考,你不开心就不要参考

    2024-06-05 20:46:03       12 阅读
  2. 网络协议学习笔记

    2024-06-05 20:46:03       8 阅读
  3. C++网络编程——实现一个简单的echo服务器

    2024-06-05 20:46:03       8 阅读
  4. SQL生成自然数,日历序列 浅析

    2024-06-05 20:46:03       8 阅读
  5. 前端如何去除本地版本号缓存

    2024-06-05 20:46:03       8 阅读