当前位置:网站首页>C陷阱与缺陷 第3章 语义“陷阱” 3.4 避免“举偶法”
C陷阱与缺陷 第3章 语义“陷阱” 3.4 避免“举偶法”
2022-07-29 02:48:00 【weixin_客子光阴】
避免“举偶法”
“举偶法”(synecdoche)是一种文学修辞上的手段,有点类似于以微笑表示喜悦、赞许之情,或以隐喻表示指代物与被指代物的相互关系。在《牛津英语词典》中,对“举偶法”(synecdoche)是这样解释的:“以含义更宽泛的词语来代替含义相对狭窄的词语,或者相反;例如,以整体代表部分,或者以部分代表整体,以生物的类来代表生物的种,或者以生物的种来代表生物的类,等等。”
C语言中一个常见的“缺陷”:混淆指针与指针所指向的数据。对于字符串的情形。编程人员更是经常犯这种错误。
例如:
char *p, *q;
p = "xyz";
上面的赋值语句使得p的值是字符串"xyz",然而实际情况并不是如此,记住这一点尤其重要。实际上,p的值是一个指向有'x'、'y'、'z'和'\0'这4个字符组成的数组的起始元素的指针。因此,如果我们执行下面的语句:
q = p;
p和q现在是两个指向内存中同一地址的指针。这个赋值语句并没有同时复制内存中的字符。
需要记住的是,赋值指针并不同时复制指针所指向的数据。
因此,当我们执行下面的语句之后:
q[1] = 'Y';
q所指的内存现在存储的是字符串'xYz'。因为p和q所指向的是同一块内存,所以p指向的内存中存储的当然也是字符串'xYz'。
译注:ANSI C标准中规定中禁止对string literal作出修改。K&R C中对这一问题的说明是,试图修改字符串常量的行为是未定义的。某些C编译器还允许q[1]='Y'这种修改行为,如LCC v3.6。但是,这种写法不值得提倡。
边栏推荐
猜你喜欢

Verilog的时间系统任务----$time、$stime、$realtime

navicat新建数据库

Small program source code for campus stray cat information recording and sharing / wechat cloud development medium big cat spectrum small program source code

创客教育的起源和内涵的基本理念

IDEA安装后无法启动

C语言:判断字母

Analysis of Project-based Learning Creativity in steam Education

(作业)C语言:atoi和strncpy、strncat、strncmp的模拟实现

OSPF experiment

万字详解 Google Play 上架应用标准包格式 AAB
随机推荐
TP5.0 小程序用户无需登录,直接获取用户手机号。
cuda-gdb提示:/tmp/tmpxft_***.cudafe1.stub.c: No such file or directory.
明明开发薪资高,为什么我还是选了测试?
MySQL - count(字段)、count(主键)、count(1)、count(*)的区别
QT compilation of IOT management platform 48 characteristic function design
Available data sets for scene classification tasks (part)
第2章 VRP命令行
Analyzing the subjective consciousness of emotional resonance between robots and human beings
Feedback function of conference OA
My approval function of conference OA project
MySQL compound query (important)
Pytest environment deployment + use case execution management + use case parameterization
并发模式之单例和不变模式
JVM基础入门篇一(内存结构)
盘点国内外项目协同管理软件:SaaS和定制化成趋势
Verilog's time system tasks - $time, $stime, $realtime
[Luogu p8352] independent set of small n (DP set DP) (property)
SQL查询数据之多表(关联)查询
Weekly recommended short videos: how to make product development more effective?
Source code of Jiugongge heart puzzle Applet / source code of main wechat applet with traffic