C语言常量字符串

C语言中的常量字符串 常量字符串是指在程序中定义的不可修改的字符串。这类字符串的内容在程序运行时被初始化后不可更改。常量字符串通常会存储在只读内存区,任何修改都可能导致未定义的行为。在C语言中,常量字符串通常通过字符串字面值来定义。这些字面值会被自动转换为字符数组,并以空字符\0结尾,标志着字符串的结束。// 定义常量字符串// 输出: Hello, World!return 0;常量字符串在C语言中是不可修改的字符串,它们通常存储在只读内存区。 阅读详情

关于C语言字符串常量不可修改,起初误认为是编译器
把这样的代码

char *s=""str";

优化成了
const char*="str".
const属性也去不了。

但是实际上是与常量字符串的内存体现有关。bodata段

各类段

bss段:

BSS段(bsssegment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStarted by Symbol的简称。BSS段属于静态内存分配。

data段:

数据段(datasegment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

text段:

代码段(codesegment/textsegment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

rodata段:

存放C中的字符串和#define定义的常量

heap堆:

堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
stack栈:
是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

回答

以下摘自:https://www.zhihu.com/question/20779337

C语言目前有两个主要标准C89和C99。这两个标准中对字符串常量的定义类似。要点:

类型是char[] (原因不明,没有看到过权威解释,估计是历史遗留。)
连续存储,末尾自动添加\0
静态存储
相同值常量的地址可以不同
修改字符是未定义行为

因为.rodata和.text一样是操作系统保护只读的。这就是标准中所说的未定义行为。实际中大部分操作系统(没有测试过)应该都会按照内存越权访问处理。

这样做的好处并不明显。理论上fork的时候可以不拷贝.rodata,但主流的fork都实现了Copy-on-write,性能上应该差别不大了。其他的好处也不大。

简单来说,这样做既没有什么明显的好处,也没有太大的坏处,很可能只是Dennis Ritchie et al拍脑袋的一个决定,原因可能就是没有原因。考虑到C并不是一个精心设计的语言,这种小问题并不少见。例如史上最昂贵的一个字节的错误(The Most Expensive One-byte Mistake)。可惜DR老大已故去,恐怕无从考证了。

液态神经网络系列(四) | 一条 PyTorch 从零搭建 LTC 细胞 本文详细介绍了如何从零开始用PyTorch实现Liquid Time-constant Networks(LTC)神经元模型。首先将LTC的核心微分方程拆解为输入电导、系统时间常数和数值积分器三个模块,然后逐步构建LTCCell类,包括物理参数初始化、突触参数设置和前向演化过程。文章还展示了如何封装LTCModel处理不规则时间序列,并通过正弦波抗干扰实验验证了LTC模型的优越性。最后讨论了数值稳定性、计算代价等实现细节,并预告了下一篇将探讨使用伴随灵敏度算法优化显存占用的方法。 阅读详情

相关推荐

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

fyihdg的专栏 1218

第十三课(5)用C函数实现拷贝和bss段清除(不用汇编指令写了)

在前面,我们使用汇编程序来实现了重定位和清bss段,本节我们将使用C语言,实现重定位和清除bss段。 1、使用C函数实现拷贝和bss段清除——汇编寄存器传入参数 打开start.S把原来的汇编代码删除改为调用C函数 /* 重定位text, rodata, data段整个程序 */ mov r1, #0 ldr r2, =_start /* 第1条指令运行...

qq_40674996的博客 545

PTC-6-2004汽轮机性能计算源代码,pycharm-包括试验计算、一类修正、二类修正-以CC350-16.7/0.98/0.5/538/538型汽轮机为例,5万7千字,过程不易欢迎打赏

汽轮机性能计算完整源代码-简化试验-包括试验计算一类修正计算和二类修正计算目录图 1 工程结构。

weixin_43441028的博客 999

C语言中的字符串常量

C语言中的字符串常量 1、字符串是内存中一段连续的 char 空间,以 ‘\0’ (数字0) 结尾。 2、字符串常量是由双引号括起来的字符序列,如 “china” 、“C program” ,“$12.5” 等都是合法的字符串常量。 字符串常量与字符常量的区别: 每个字符串的结尾,编译器会自动的添加一个结束标志位 ‘\0’ ,即 “a” 包含两个字符 ‘a’ 和 ’\0’ 。 ...

weixin_44982036的博客 1万+

基于STM32F407的DDS信号源设计与实现:DAC+DMA+TIM的高精度波形生成

本文详细介绍了基于STM32F407微控制器实现高精度DDS信号源的完整方案。通过结合DAC、DMA和TIM外设,并运用DDS算法,实现了分辨率高达0.001Hz的波形生成。文章深入剖析了相位累加器、波表查表等核心原理,提供了从CubeMX配置到代码实战的完整指南,并探讨了性能优化与高频输出问题的解决方案。

weixin_29193259的博客 503

UFS 3.1协议分析(第一至四章) -- UFS概述

Contents协议规范规范参考术语和定义简单概述通用特性接口特性功能特性 协议规范     UFS3.1协议规定了UFS电气接口和存储器件的特性以及系统架构。 特性:低功耗、高数据吞吐量、低电磁干扰、大容量存储器子系统效率的优化 电气接口:使用基于MIPI M-PHY的高级差分接口;M-PHY作为物理层,MIPI UniPro作为链路层,二者结合形成UFS接口的互联。 架构模型:参考 INCITS T10(SCSI) SAM 标准,命令协议基于 INCITS T1

Frank_sample的专栏 1万+

C语言常量字符串详解

常量字符串是用双引号括起来的字符串,例如:“hello c3”。它在C语言中本质上是字符数组,即以字符数组的形式保存在内存中。常量字符串是不可变的,一旦定义后,就无法修改其中的字符。常量字符串内部自带’\0’(空字符)结尾,作为字符串的结束标志。常量字符串是C语言中常见的数据类型,具有特定的定义和属性。它是字符数组的一种表示形式,不能被修改,长度以及结尾 ‘\0’ 都是自动添加的。通过下标的方式可以访问其中的字符,但不能赋值修改。在使用常量字符串时需要注意其只读性质,尽量避免对其进行修改操作。

weixin_47712251的博客 3209

深入解析CycloneDDS跨域通信中的XML配置文件优化策略

本文深入解析了CycloneDDS跨域通信中XML配置文件的优化策略,重点介绍了网络接口配置、多播设置、性能调优参数及复杂场景下的配置案例。通过实战技巧和调试方法,帮助开发者在SoC环境中实现高效稳定的跨域通信,提升系统性能。

soda5的博客 688

C语言常量(整型、实型、字符型、字符串、符号常量)

对于C语言常量,该文章有详讲,由于文章太长,可参考如下思维导图和目录,可通过目录选择自己所需要的内容阅读。

m0_75115696的博客 1万+

Open Lovable 网站克隆AI工具超详细实战教程(含环境配置、排错与代码修改)

本教程面向有一定计算机基础的新手用户,提供一份全面、深入的 Open Lovable 使用指南。从开发环境搭建、API密钥获取、项目部署到网站克隆、代码下载、本地运行与二次开发,涵盖全流程细节与常见问题解决方案。通过本教程,新手可掌握如何利用AI驱动的Open Lovable工具,将任意目标网站智能复刻为结构清晰、可编辑的现代前端项目(React/Vite),实现快速原型开发与技术学习。

hy行者勇哥的博客 4962

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 203

【C语言】常量及字符串

【C语言】常量及字符串

weixin_63060867的博客 680

clock min pulse width检查

高电平脉宽 = clock fall edge到达FF/CK的时间 - clock rise edge到达FF/CK的时间;低电平脉宽 = 下一T clock rise edge到达FF/CK的时间 - clock fall edge到达FF/CK的时间。而required pulse width是根据FF/CK处的transition,根据查找表计算得到的。为什么clock transition越大,会导致required pulse width越大呢?5、 降低clock上的串扰。

芯冰乐 577

C语言字符串常量

C语言字符串常量 一.字符串常量的声明 char *p = "hello";//指针直接往上戳 一个字符串常量为什么会给一个指针赋值?字符串常量的值是该字符串第一个字母的首地址敲一段代码验证一下 结论:字符串本身是有值的,就是第一个字符的地址。 因为它的值是地址,所以可以这样用 还有一条:同一个字符串常量,它们的值(地址)相同 二.注意事项 1.字符串常量和字符数组不同...

qq2071114140的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言字符常量与字符串常量

字符常量:一个用单引号括起来的单个字符(或字符转义序列或三字母词) 实质(含义):是一个整形值。属于四大基本数据类型(分别是整型,浮点型,指针,聚合类型)中的整型(integers)。 如‘a', '\n', '??!', '\24' 针对上面四个例子逐一讲解: 1. 第一个’a'似乎没什么好说的,严格满足定义。(有一点想说一下,'abc'到底算不算...

Y先生的自留地 3万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c语言字符串常量表达,C语言基础教程:字符常量和字符串常量

1.字符常量字符常量由单引号括起的一个字符组成的。例如,‘B’,‘d’,’9’,’\n’,‘\0,’,’\”等都是字符常量,单引号是字符常量的定界符。单引号符可由}‘\”表示,即使用了转义序列的形式。因此,在字符常量中,对一般可打印字符采用直接写出字符符号的方法,而对不可打印字符采用转义序列的方法。在C语言中,字符常量具有数值,该值便是该字符的ASCII码值。因此,一个字符常量可以像整数一徉的参与...

weixin_30745053的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c语言常量和字符串

此外,C语言中还有一些特殊的字符序列,称为转义字符,用于表示一些特殊字符或控制字符,如换行符(‘\n’)、制表符(‘\t’)、双引号(‘"’)、反斜杠(‘’)等。宏常量是在预处理阶段进行文本替换的,它们不会占用内存空间,而是直接替换为其对应的值。符号常量是通过宏定义来创建的具有常量值的符号。在c语言中,常量是不可改变的值,其值在程序执行期间保持不变。上述代码中,我们定义了一个名为Weekdays的枚举类型,它包含了一组星期的枚举常量。枚举常量的默认值从0开始递增,可以通过指定初始值来自定义枚举常量的值。

qq_58050159的博客 1978

C语言中可以用字符串常量来,C语言中的字符串常量

C语言中的字符串常量字符串常量是由一对双引号括起的字符序列。例如: "CHINA" ,"C program: , "$12.5" 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别:1.字符常量由单引号括起来,字符串常量由双引号括起来。2.字符常量只能是单个字符,字符串常量则可以含一个或多个字符。3.可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符...

weixin_39866741的博客 1668

C语言程序——字符串常量的输出

C语言中字符串变量的输出。

glx6666的博客 3997

c语言如何把数组转为字符串_C语言中是如何定义常量的?那定义字符串呢?

常量有整型常量、浮点型常量、字符型常量及字符串常量。 ‘常量定义是指定义符号常量,用一个标识符来代表一个常量,通过宏定义预处理指令来实现。常量的定义:#define count 60这就定义了一个常量 count 它的值是一个常量60 在整个程序中不变关于实际参数和,形式参数:可以这样通俗的去理解:主调函数中的参数是实际参数,被调函数中的参数是形式参数,比如说:如下代码段被调函数:int max(...

weixin_39724362的博客 3722

C语言中字符串常量

字符串常量是C语言中一种表示文本数据的便捷方式,但要注意其只读特性,不应尝试修改字符串常量的内容。通过字符数组可以实现可修改的字符串存储,根据需求选择适当的方式使用字符串。

weixin_50615869的博客 836

C语言:常量字符串、字符数组的一个误区

遇到了一个有关常量字符串的问题,发现我对此的理解还不是很清楚,甚至存在误区!! 文章目录1.字符串常量不可修改2.错误示例3.使用字符数组char a[] = "abcd";为什么不会出错?4.总结 1.字符串常量不可修改 当我们使用char *p = “abcd”;定义一个字符型指针指向"abcd"时,使用指针p试图去修改字符串的内容是错误的! 看图: 可以看到出现了segmentatio...

温柔的博客 1354

C语言 DAY2 【初识常量,字符串】

本文章总结于此视频提示:以下是本篇文章正文内容,下面案例可供参考100int main()return 0;枚举与#define 宏的区别下面再看看枚举与#define 宏的区别:1)#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量。3)枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个。原文链接。

Xjb200512的博客 1176

c语言笔记——字符型常量和字符串常量

\\0’不合法 ‘\0’合法。’\'不合法 ‘\\’合法。1到2位十六进制数所代表的字符。1到3位八进制数所代表的字符。常规、转义、八进制、十六进制。一种形式:双引号括起来的。如:“abcdefgh”必须以反斜杠“\”开头。'\1011'不合法。

m0_47934337的博客 2万+

C语言中如何把字母当常量,C语言字符常量与字符串常量

字符常量:一个用单引号括起来的单个字符(或字符转义序列或三字母词)实质(含义):是一个整形值。属于四大基本数据类型(分别是整型,浮点型,指针,聚合类型)中的整型(integers)。如‘a', '\n', '??!', '\24'针对上面四个例子逐一讲解:1. 第一个’a'似乎没什么好说的,严格满足定义。(有一点想说一下,'abc'到底算不算字符常量呐?在《C与指针》中说这种情况属于多...

weixin_34649252的博客 1127

C语言字符常量和字符串常量的区别

字符常量只能包含一个字符,即用单引号括起来的一个字符,例如'a'、'b'、'c'等。需要注意的是,字符数组的长度必须大于等于字符串常量的长度,因为字符串常量以空字符'\0'结尾,所以字符数组的长度应该比字符串常量的长度多1。C语言字符常量是指由单引号括起来的一个字符,例如'a'、'b'、'c'等。在C语言中,还可以使用转义字符来表示一些特殊的字符,例如'\n'表示换行符,'\t'表示制表符等。例如,字符常量'a'的ASCII码值为97,字符常量'A'的ASCII码值为65。

公众号:风景邮递Yuan的博客 734
上一篇: C实现C(3)
下一篇: STL源码剖析笔记(空间适配器)
Ink_cherry
博客等级 码龄10年 37粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值