语言环境:C语言
IDE:codeblocks
编译器:MinGW

const关键字的这里不做赘余叙述。

下面探讨下const修饰char *的函数形参时的三种情况。

第一种 const修饰的字符串指针 赋值给 临时变量字符串指针

#include<stdio.h>void testfunc(const char *teststr)
{char *temp;temp = teststr;printf("before change, the teststr is : %s\r\n", teststr);temp[1] = 'C';printf("after change, the teststr is : %s\r\n", teststr);return;
}int main()
{char teststr[20] = "hello world.";testfunc(teststr);return 0;
}报错信息:
D:\myproject\tempfiles_for_c_c++\blanckt.cpp|6|error: invalid conversion from 'const char*' to 'char*' [-fpermissive]|

const修饰字符串指针,表明teststr指向的内容不可更改。直接将指针的值复制给一个临时字符串指针变量,编译器会报错拦截。
这里编译器的告警还是做得很不错的。当然,这里仅仅只是个类型转换错误的告警。

第二种 const修饰的字符串指针强制转换后 赋值给 临时变量字符串指针

#include<stdio.h>void testfunc(const char *teststr)
{char *temp;temp = (char *)(void *)teststr;//++teststr;printf("before change, the teststr is : %s\r\n", teststr);temp[1] = 'C';printf("after change, the teststr is : %s\r\n", teststr);return;
}int main()
{char teststr[20] = "hello world.";testfunc(teststr);return 0;
}

这里将teststr的值强制转换后复制给temp。
执行结果:

before change, the teststr is : hello world.
after change, the teststr is : hCllo world.Process returned 0 (0x0)   execution time : 0.021 s
Press any key to continue.

执行不会报错,并且能够修改成功。
可以看到,const关键字是给变量加了一个不可更改的属性,
简言之,对修饰的这个变量无法进行某些修改操作,不然会报错。
const char *teststr; 无法通过teststr修改指向的内容,可以修改teststr本身的值
char * const teststr; 无法通过teststr修改teststr的值,可以修改teststr指向的内容
const int test; 无法通过test修改test的值

第三种 const修饰的字符串指针强制转换后 赋值给 临时变量字符串指针 静态字符串地址复制给const修饰的字符串指针形参

#include<stdio.h>void testfunc(const char *teststr)
{char *temp;//++teststr;temp = (char *)(void *)teststr;printf("before change, the teststr is : %s\r\n", teststr);temp[1] = 'C';printf("after change, the teststr is : %s\r\n", teststr);return;
}int main()
{char *teststr = "hello world.";testfunc(teststr);return 0;
}

执行结果:

before change, the teststr is : hello world.Process returned -1073741819 (0xC0000005)   execution time : 1.740 s
Press any key to continue.

可以看到第一句打印是可以执行的,后面就报错了。这是因为传入的指针指向的是常量字符串,不可被更改。

const函数形参char *相关推荐

  1. 【C 语言】字符串模型 ( 两头堵模型 | 将 两头堵模型 抽象成业务模块函数 | 形参返回值 | 函数返回值 | 形参指针判空 | 形参返回值操作 )

    文章目录 一.将 两头堵模型 抽象成业务模块函数 二.完整代码示例 一.将 两头堵模型 抽象成业务模块函数 将 两头堵模型 抽象成业务模块函数 相关要点 : 形参返回值 : 函数的返回值 , 一般使用 ...

  2. const与修饰函数形参

    C++中,const与&修饰函数形参的可能情况有四种:C语言中,情况只有1)和3)两种. 1) string str 这是最普通的传值调用,首先对原str进行一次拷贝,会调用拷贝构造函数.st ...

  3. 【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )

    文章目录 一.函数形参使用推荐方法 二.完整代码示例 一.函数形参使用推荐方法 在函数中 , 形参 中的 指针变量 , 不建议直接使用 ; 推荐 在 函数中 , 定义 局部 指针变量 , 接收 形参中 ...

  4. 关于函数形参的一些讨论

    形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它只是实参的别名. 非引用形参: 普通的非引用类型的参数通过复制对应的实参实现初始化.当用实参副本初始化形 ...

  5. const参数,const返回值与const函数

    在C++程序中,经常用const 来限制对一个对象的操作,例如,将一个变量定义为const 的: const  int  n=3; 则这个变量的值不能被修改,即不能对变量赋值. const 这个关键字 ...

  6. C语言编程基础-10函数形参数组做形参文件操作

    函数形参 被调函数的形参在被调用时临时创建并使用实参对其赋值,故直接修改形参(特殊形式的形参如指针,数组除外)本身只会影响到被调函数内部; 形式参数是在函数调用发生时临时创建出来的,在函数调用结束时又 ...

  7. C++数组名做函数形参/指针

    数组名做函数形参 数组未开辟空间时 #include <iostream> using namespace std; void test(int* a) {*a = 0;*(a+1) = ...

  8. 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 函数形参设置 | 确保打开文件成功 | 统计文件大小 )

    文章目录 一.函数形参设置 二.确保打开文件成功 三.统计文件大小 一.函数形参设置 函数形参设置 : 该函数的作用是 写出或更新配置项 , 遍历每行数据 , 检查 key 键 是否存在 , 如果存在 ...

  9. 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 头文件定义 | 头文件导入限制 | 兼容 C++ 语言 | 函数形参输入输出属性注释)

    文章目录 一.头文件定义 1.头文件导入限制 2.兼容 C++ 语言 3.函数形参输入输出属性 4.代码示例 一.头文件定义 1.头文件导入限制 头文件导入限制 : 防止头文件多次导入 , 将头文件的 ...

最新文章

  1. 过年了,少喝点酒,多喝点茶—绿茶不仅仅是你想的那么简单
  2. c 语言怎么编译 .dll,将你的 C 语言代码编译成 .NET
  3. 准备辞职了,走之前想解决的问题ptr 为空
  4. 刷光借呗额度之后用户突然去世,支付宝会怎么做?
  5. Java 8:在新的Nashorn JS引擎中编译Lambda表达式
  6. Spring Boot中实现简单表单提交(登录功能)
  7. 图片服务 - thumbor设置背景色
  8. mysql常用调试工具_最常用的8款PHP调试工具
  9. 制作Camtasia 2020击键标记动画
  10. TLS协议簇加解密流程
  11. Android ListView优化总结
  12. 单方差分析MATLAB,MATLAB单因素方差分析.PDF
  13. 【数据库取证篇】阿里云RDS数据库简介
  14. 基于arduino +机智云物联网平台的阳台生态控制系统的设计
  15. PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume
  16. PERT图的事件、活动、松弛时间、关键路径的理解和计算
  17. 什么灯对学生视力影响小?国AA级照度、无蓝光的护眼台灯
  18. 【魔兽争霸3地图编辑】vJass 教程
  19. C/C++数据结构(四) —— 栈
  20. 调用http://apistore.baidu.com网站的接口

热门文章

  1. 【NLP】Seq2Seq原理详解
  2. 入耳式无线蓝牙耳机哪款好?无线入耳式蓝牙耳机音质排行榜
  3. 为什么在开曼群岛注册公司?
  4. 中国象棋程序的设计与实现(八)-如何构造一个棋子(車馬炮等)
  5. 编译原理——第二章-最左推导、最右推导以及语法树
  6. 计算机相关的迎新标语,迎新横幅的标语(精选50句)
  7. 智慧党建软件开发,党员信息管理平台建设方案
  8. 安卓中的几种线程间通信方式
  9. 毫升 | 主成分分析(PCA)
  10. Mac:系统深色模式下关闭软件深色模式的办法(针对软件没有设置选项的情况)