由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储
2016-03-07 10:39
281 查看
#include <stdio.h> #include <string.h> int main() { char s[]="Copywrite 1999-2000 GGV Technologies"; char* s2=strupr(s);//把s数组中的字符串转换成大写并且返回s用来初始化s2 printf("%s",s2); printf("%s",s); //这个时候s和s2是相等的,指向同一个字符串。 // 注意:不能使用以下方式调用 // char* p="for test"; // strupr(p); // 这样调用会产生异常,原因是:指针p 这里定义的是常量字串,而常量字串我们知道是不可以更改的 getchar(); return 0; }
个人理解如下:
在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。
在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符 的指针”,例如:char *a = "123" ; a = "abc";,后者指向这些字符所存储的地址。但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。例如:char a[5];a[0] = "a";就是错误的,报错结果:invalid conversion from 'const char*' to 'char'。
指针形式仅仅是将常量的地址告诉了指针,程序在执行时是无法修改常量所在的地址区域;数组形式将常量赋给了一个数组变量。
相关文章推荐
- JS代码片段:一个日期离现在多久了
- iOS 使用正则表达式库RegexKitLite的问题
- AngularJS 五大特性(为克服HTML在构建应用上的不足而设计)
- JavaEE_ boolean类型JavaBean的get方法
- pyspark和spark pipe性能对比 用例程序
- 欢迎使用CSDN-markdown编辑器
- 基于JavaScript实现快速转换文本语言(繁体中文和简体中文)
- 网易云课堂-陈越、何钦铭-数据结构-2016春,02-线性结构1 一元多项式的乘法与加法运算,学习笔记
- html5存储数据,替代cookie
- C++文件操作:打开文件和写入文件
- STM32F051C8T6控制LED
- android 6.0 SystemUI源码分析(2)-SystemUI启动流程
- presto安装介绍
- 关于java项目中加入jquery-1.x.js文件报错问题
- Doctrine和dbal的关系
- sql 常用基础查询
- 机器学习算法 Python & R速查表
- 【leetcode】【119】Pascal's Triangle II
- Android Hal 分析
- 解决maven搭建webapp项目,src/main/java无法建立的问题