=的底层实现?

jqx_ah 2009-08-19 10:08:22
“=”操作符的底层实现,谁能提供下

以前记得“=”不能作为字符串的赋值,
现在居然可以,而且没有告警提示。
int main()
{
char *p;
p="iiiiiiiiiiii";
printf("-%s--%d-",p,strlen(p));
}
...全文
85 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
highball 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wissup 的回复:]
字符串常量"abcde"这样的书写方式,实际上表示的是一个指向字符串首字符的常量指针,当然可以赋值给指针了。但是数组名是(指针)常量,所以不能这样赋值。

实际上,C语言中的字符串概念:就是一串以NUL字节结尾的0个或多个字符,其书写方式是用一对双引号包围一串字符,例如:"Hello,",""等。
当一个字符串常量出现在一个表达式中,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。所以,你可以把字符串常量赋值给“指向字符的指针”。但是,你不能把字符串常量赋值给字符数组,因为字符串常量是一个指针,而不是这些字符本身。但是,可以使用标准C函数库中的一组函数来对字符串进行复制,完成赋值。
[/Quote]
恩,正解,很详细。
wissup 2009-08-19
  • 打赏
  • 举报
回复
字符串常量"abcde"这样的书写方式,实际上表示的是一个指向字符串首字符的常量指针,当然可以赋值给指针了。但是数组名是(指针)常量,所以不能这样赋值。

实际上,C语言中的字符串概念:就是一串以NUL字节结尾的0个或多个字符,其书写方式是用一对双引号包围一串字符,例如:"Hello,",""等。
当一个字符串常量出现在一个表达式中,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。所以,你可以把字符串常量赋值给“指向字符的指针”。但是,你不能把字符串常量赋值给字符数组,因为字符串常量是一个指针,而不是这些字符本身。但是,可以使用标准C函数库中的一组函数来对字符串进行复制,完成赋值。
abcdef0966 2009-08-19
  • 打赏
  • 举报
回复
C语言中无论何时使用字符串常量,都自动产生用一个指向该字符串的指针
char *p;
p="iiiiiiiiiiii";
这里是,编译时在静态存储区分配了空间存储字符串,程序运行到此处,再将字符指针指向该空间,即将字符串常量的指针赋值给变量p
比较
char text[8];
text = "iiiii";
text作为数组名是地址常量,不可被赋值
lzp729 2009-08-19
  • 打赏
  • 举报
回复
""可看做操作符, 作用是取地址
''可看做操作符, 作用是取ASCII值
tompaz 2009-08-19
  • 打赏
  • 举报
回复
常量字符串的赋值
zjw6861982 2009-08-19
  • 打赏
  • 举报
回复
合法的,但是作为实际应用时容易出状况,所以应该摒弃
Paradin 2009-08-19
  • 打赏
  • 举报
回复
就是整数赋值吧
wzyzb 2009-08-19
  • 打赏
  • 举报
回复
顶你
fandouC 2009-08-19
  • 打赏
  • 举报
回复
因为这里是指针,赋值即把字符串存放的首地址赋给指针

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧