const函数形参char *
语言环境: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 *相关推荐
- 【C 语言】字符串模型 ( 两头堵模型 | 将 两头堵模型 抽象成业务模块函数 | 形参返回值 | 函数返回值 | 形参指针判空 | 形参返回值操作 )
文章目录 一.将 两头堵模型 抽象成业务模块函数 二.完整代码示例 一.将 两头堵模型 抽象成业务模块函数 将 两头堵模型 抽象成业务模块函数 相关要点 : 形参返回值 : 函数的返回值 , 一般使用 ...
- const与修饰函数形参
C++中,const与&修饰函数形参的可能情况有四种:C语言中,情况只有1)和3)两种. 1) string str 这是最普通的传值调用,首先对原str进行一次拷贝,会调用拷贝构造函数.st ...
- 【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 的操作一律创建新的 指针变量 执行 | 引入 辅助 局部 指针变量 )
文章目录 一.函数形参使用推荐方法 二.完整代码示例 一.函数形参使用推荐方法 在函数中 , 形参 中的 指针变量 , 不建议直接使用 ; 推荐 在 函数中 , 定义 局部 指针变量 , 接收 形参中 ...
- 关于函数形参的一些讨论
形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值,如果形参为引用类型,则它只是实参的别名. 非引用形参: 普通的非引用类型的参数通过复制对应的实参实现初始化.当用实参副本初始化形 ...
- const参数,const返回值与const函数
在C++程序中,经常用const 来限制对一个对象的操作,例如,将一个变量定义为const 的: const int n=3; 则这个变量的值不能被修改,即不能对变量赋值. const 这个关键字 ...
- C语言编程基础-10函数形参数组做形参文件操作
函数形参 被调函数的形参在被调用时临时创建并使用实参对其赋值,故直接修改形参(特殊形式的形参如指针,数组除外)本身只会影响到被调函数内部; 形式参数是在函数调用发生时临时创建出来的,在函数调用结束时又 ...
- C++数组名做函数形参/指针
数组名做函数形参 数组未开辟空间时 #include <iostream> using namespace std; void test(int* a) {*a = 0;*(a+1) = ...
- 【C 语言】文件操作 ( 配置文件读写 | 写出或更新配置文件 | 函数形参设置 | 确保打开文件成功 | 统计文件大小 )
文章目录 一.函数形参设置 二.确保打开文件成功 三.统计文件大小 一.函数形参设置 函数形参设置 : 该函数的作用是 写出或更新配置项 , 遍历每行数据 , 检查 key 键 是否存在 , 如果存在 ...
- 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 头文件定义 | 头文件导入限制 | 兼容 C++ 语言 | 函数形参输入输出属性注释)
文章目录 一.头文件定义 1.头文件导入限制 2.兼容 C++ 语言 3.函数形参输入输出属性 4.代码示例 一.头文件定义 1.头文件导入限制 头文件导入限制 : 防止头文件多次导入 , 将头文件的 ...
最新文章
- 过年了,少喝点酒,多喝点茶—绿茶不仅仅是你想的那么简单
- c 语言怎么编译 .dll,将你的 C 语言代码编译成 .NET
- 准备辞职了,走之前想解决的问题ptr 为空
- 刷光借呗额度之后用户突然去世,支付宝会怎么做?
- Java 8:在新的Nashorn JS引擎中编译Lambda表达式
- Spring Boot中实现简单表单提交(登录功能)
- 图片服务 - thumbor设置背景色
- mysql常用调试工具_最常用的8款PHP调试工具
- 制作Camtasia 2020击键标记动画
- TLS协议簇加解密流程
- Android ListView优化总结
- 单方差分析MATLAB,MATLAB单因素方差分析.PDF
- 【数据库取证篇】阿里云RDS数据库简介
- 基于arduino +机智云物联网平台的阳台生态控制系统的设计
- PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume
- PERT图的事件、活动、松弛时间、关键路径的理解和计算
- 什么灯对学生视力影响小?国AA级照度、无蓝光的护眼台灯
- 【魔兽争霸3地图编辑】vJass 教程
- C/C++数据结构(四) —— 栈
- 调用http://apistore.baidu.com网站的接口