字符串的两种定义方式

char数组

char sa[] = “hello world”;

char指针

char *sp = “hello world”;

这两种方式都产生了一个”hello world”的字符串常量,字符串常量存储在静态存储区中,静态存储区中的内容在程序运行的整个过程中都存在,而且只存储一份。

数组与指针的关系

在第一种定义中,字符串常量在编译时就已经分配好了空间,但直到运行时才会为数组分配存储空间,这时,存储在静态存储区中的字符串常量会被拷贝一份到数组中,此后,数组名sa与&sa[0]等价。重要的是,sa是一个常量,你不能修改sa的值,你可以通过sa+1来标识数组里的下一个元素,也可以修改数组里的元素。然而,sa++是不允许的,因为自增运算符只能作用于变量而不是常量。

第二种定义中,程序运行时只为指针变量sp分配了存储空间,用来字符串常量”hello world”的地址,这时,字符串常量没有被拷贝。sp的值是可以改变的,如++sp将指向字符e。

总之,数组初始化是从静态存储区中把一个字符串拷贝给数组,而指针初始化只是复制这个字符串的地址。

示例

#include

int main(int args, char **argv) {

char sa[] = "hello world";

char *sp = "hello world";

// sa++; 错误,sa是常量

sp++;

sa[1] = 'M';

*(sa+2) = 'X';

// sp[1] = 'M'; // 错误,不能修改常量值

printf("%s\n", sa);

}

c语言中字母的定义,c语言字符串定义与初始化 - 且听风吟相关推荐

  1. c语言中字母大写转小写,C语言中字母大小写转换的简单操作

    大写字母要转换小写字母,要怎么操作呢?而在C语言开发中,我们经常会遇到这样或者那样的问题,别着急,爱站技术频道为你细细道来C语言中字母大小写转换的简单操作. C语言tolower()函数:将大写字母转 ...

  2. C语言中你可能会用到的字符串函数的代码

    将写内容过程中比较常用的内容段做个备份,下面资料是关于C语言中你可能会用到的字符串函数的内容. {if(dest == src)return dest;else if(dest < src){} ...

  3. verilog语言中的@什么意思 verilog语言中的@什么意思

    verilog语言中的@什么意思 verilog语言中的@什么意思 2012-05-27 22:47 在英语中@ 读at,也就是在--的时候,这个小学应该学过,对吧.verilog中@ 的含义就是触发 ...

  4. c语言中常用的字符函数以及字符串函数

    文章目录 前言 一.常用字符串函数 1.strlen() 2.strcpy() 3.strcat() 4.strcmp() 5.strstr() 6.memcpy() 6.memmove() 二.qs ...

  5. c加加属于面向对象的程序设计语言吗,下列语言中属于面向对象的程序设计语言是______。A、Visual BasicB、PASCALC、CD、FORTRAN...

    下列语言中属于面向对象的程序设计语言是______.A.Visual BasicB.PASCALC.CD.FORTRAN 更多相关问题 经纬仪如存在指标差,将使观测结果出现( ). 德治的约束作用主要 ...

  6. C语言中字母a等于,C语言中’a’和"a"有什么区别?,c语言中“!a"是什么意思啊...

    导航:网站首页 > C语言中'a'和"a"有什么区别?,c语言中"!a"是什么意思啊 C语言中'a'和"a"有什么区别?,c语言中"!a"是什么意思啊 匿名网友: 1.本质区 ...

  7. c语言中 字母对应的数值,c语言字母对应ascii码 实型数据,与字符型数据

    知识点:实型的定义方法和实型常量的表达方法; 重要程度:★★★★ 1.实型常量 在C语言中,实型常量有两种表示形式:小数形式和指数形式. (1)小数形式 规则如下:1. 有且仅有一个小数点. 2. 左 ...

  8. c语言中变量的大小,C语言变量定义

    C语言变量定义 程序设计就是让计算机按照一定的指令来进行工作,可以说数据的处理是程序设计的主要任务.那么数据是怎么加入到计算机的内存中呢?下面是小编分享的C语言变量定义,欢迎大家阅读!更多相关信息请关 ...

  9. c语言中宏调用比函数调用,C语言-宏定义与使用分析

    1.C语言中的宏定义 #define是预处理器处理的单元实体之- #define定义的宏可以出现在程序的任意位置 #define定义之后的代码都可以使用这个宏 2.定义宏常量 #define定义的宏常 ...

最新文章

  1. HTML5 Canvas编写五彩连珠(3):设计
  2. for android 软件,安卓特工 for Android
  3. java- 和 || 优先级的问题
  4. 苹果手机怎么清理听筒灰尘_安卓 | 让手机自动清理听筒扬声器灰尘,你试过了吗?...
  5. caffe学习笔记--跑个SampleCode
  6. 什么是 Web 应用性能评测领域的 RAIL 模型
  7. React开发(282):公共组件可以提升一下文件层级
  8. (转)基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts
  9. arpg网页游戏之地图(二)
  10. 如何写出高质量的代码 -- 给所有编程学习者的一个建议
  11. QT_T04-COOD
  12. 为什么startPage后要紧跟查询?
  13. 推荐几款优秀的开源博客系统
  14. 【vue】配置cdn加速
  15. 解决SQL server中提示对象名无效
  16. 公式不懂也无妨,业务精通才是真正的算法工程师
  17. FHS和一些文件相关的操作命令
  18. 图片在线收款发货系统源码
  19. D-bus学习笔记一 基础知识篇
  20. 如何在 R 中计算 Cramer V

热门文章

  1. git version是什么软件_Deepin 15.11 安装 ZoneMinder 视频监控软件
  2. php+mysql记事本_一个简单记事本php操作mysql辅助类创建
  3. mysql百万数据根据索引查询_mysql创建多列索引查询百万表数据的性能优化经验分享...
  4. mac wmware 无网络_无线网络中常用的技术名词
  5. HDFS常用Shell命令
  6. JAVA知识基础(八):继承
  7. MIP 扩展组件开发手册
  8. 直播的学习与使用-----采集
  9. 深入理解Netscaler INat
  10. Can’t Activate Reporting Services Service in SharePoint