社区
C++ 语言
帖子详情
const char* str="abcd" 与 char* str="abcd"有区别吗?
gaomingok
2009-07-01 07:36:35
加精
const char* str="abcd" 与 char* str="abcd"有区别吗?
...全文
11283
166
打赏
收藏
const char* str="abcd" 与 char* str="abcd"有区别吗?
const char* str="abcd" 与 char* str="abcd"有区别吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
166 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
laciqs
2010-08-13
打赏
举报
回复
另外,改变字符串字面量在C标准中是未定义行为。
laciqs
2010-08-13
打赏
举报
回复
[Quote=引用楼主 gaomingok 的回复:]
const char* str="abcd" 与 char* str="abcd"有区别吗?
[/Quote]
有区别。
以下解释平台为:x86/Linux/gcc
字符串字面值被分配在.rodata段,在加载运行时操作系统把Text Segment的页面只读保护起来,防止意外改写。
const char* str="abcd",如果是全局变量,那么str所指向的字符串字面值就不能被修改了,操作系统的内存管理和gcc的语义检查为此提供了双重保护。
而后者在运行时改写会出现段错误,gcc也不会进行语义检查。
gaojian980603
2010-07-21
打赏
举报
回复
有区别
第一个不可更改,是常量,更改会报错
第二个可更改,是变量,但是用的不对会报错
kingkingxy
2010-07-06
打赏
举报
回复
[Quote=引用 4 楼 blh 的回复:]
引用楼主 gaomingok 的帖子:
const char* str="abcd" 与 char* str="abcd"有区别吗?
区别就是
char p[] = "1234";;
const char* str="abcd"
str = p;
str[2] = '1';非法
char* str="abcd"
str = p;
str[2……
[/Quote]
编译可以通过,不代表正确!
其实不管如何说,这两个定义式都是非常危险的,
why0727
2010-06-28
打赏
举报
回复
[Quote=引用 87 楼 bsnhk 的回复:]
表面的区别是:
1、语法区别;
2、用所声明的方式来访问字符串时,前者不可修改,后者可修改;
本质上没有区别:用间接访问方式,两者都可以修改,不会提示任何警告或出错。
[/Quote]
I服了YOU,你是真正的牛人!!
liyuxia713
2010-06-26
打赏
举报
回复
mark
chumeng1hao
2010-06-12
打赏
举报
回复
MARK
panny90
2010-04-26
打赏
举报
回复
~~~~(>_<)~~~~ 明白自己几斤几两了,发愤图强!!!!
品茶
2010-04-18
打赏
举报
回复
Mark
kuillldan
2010-03-04
打赏
举报
回复
1
我赞同阿荣,标准允许的不一定就是正确的。所谓的语法没有错误,是相对于标准来说,但标准在某些时候某些问题上不一定完全正确。
char *str = “abcd”;毕竟"abcd"是常量 当程序执行 str[2] = 'B' 时编译器并不会报错,但运行阶段就抛异常了,这也说明了char *str = "abcd";这条语句不严格.严格的做法是const char *str = "abcd";
这样保证了"abcd"不被修改,运行时不出错。
simplelovelx
2010-01-26
打赏
举报
回复
这个区别大了!
一个是常变量,一个是字面值常量!
这个说明 前者是分配了内存空间 可以寻址的
而后者 不能寻址,前者可以通过特殊手段(通过基地址+偏移地址)可以修改其值的 虽然它是const!
火於菟
2010-01-26
打赏
举报
回复
汗,发不起言
cymlife
2010-01-25
打赏
举报
回复
还没注意过呢
lclhurricane
2010-01-25
打赏
举报
回复
两者在VC6下没有区别!但是推荐采用const char *p的写法!
Xuon
2010-01-25
打赏
举报
回复
就是啊,前者是一种良好的编程习惯。防止被修改。
davelv
2010-01-25
打赏
举报
回复
不同人对正确和标准的理解有所偏差。
我的观点是基本上支持baihacker和arong1234,反对blh.
赵4老师
2010-01-25
打赏
举报
回复
VC6调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
liutengdas
2010-01-23
打赏
举报
回复
151
smallbear_2008
2010-01-22
打赏
举报
回复
还真有人学习标准啊!有幸拜读,还是讨论比较好,这里面好像那个讨论还没完啊?那两个星多的大牛!!!
v_table
2009-12-29
打赏
举报
回复
前一个是const *,常指针。。
加载更多回复(146)
const
char
*
str
,
char
const
*
str
,
char
*
const
str
的
区别
,及
const
详解
c和c++中有三种定义: 1.
const
char
*
str
, 2.
char
*
const
str
, 3.
char
const
*
str
. 现总结三者之间的
区别
: 一
char
*
const
str
这是定义了一个指向字符的指针常量,即
str
的指向不能被修改,但是可以修改指针所指向的内容。 我们可以通过代码来验证修改
str
指向的内容: #include<io
str
eam> using namespace std; int main() {
char
arr[] = "
abcd
const
char
*
str
1="
abcd
"与
char
*
str
2="
abcd
"的
区别
这是CSDN论坛上一个讨论贴,觉得比较好,总结一下。
const
char
*
str
1="
abcd
"与
char
*
str
2="
abcd
"的
区别
:(1)第一个在修改某个字符的时候会在编译时报错;第二个是在运行时报错(一般说来,不是绝对)。前者是一种良好的编程习惯。(2)编译时
str
1[2] = 1是非法的,
str
2[2] = 1是合法的(在运行时会报错)。这种所谓的合
关于
char
*p=“abc“; 报错的事
以下是一个笨蛋大学生敲代码所遇到的小知识: 我在用vs2017尝试
char
*p="abc";的时候报错了,如下: 但是我在学C的时候这么写好像没什么问题,我又去C里试了一下: 也没有任何警告,看起来完全没问题。 然后我就去网上找问题,发现一篇文章说的很明白: C/C++中
char
* p = "hello" 和
const
char
* p = "hello"的
区别
- thinkingfor - 博客园 (cnblogs.com) 在写代码常常都会写
char
* p ="hello";这
char
str
[],
const
char
str
[],
const
char
*
str
区别
以下三条输出语句分别输出什么?
char
str
1[] = "asdfkjsdk";
char
str
2[] = "asdfkjsdk";
const
char
str
3[] = "asdfkjsdk";
const
char
str
4[] = "asdfkjsdk";
const
char
*
str
5 = "asdfkjsdk";
const
char
*
str
6 = "asdfkj
char
*p="abc" 与
char
p[]="abc" 的
区别
有这样一段代码:view plaincopy#include "stdio.h"
char
*get_
str
ing_1(){
char
p[] = "hello world!";return p;}
char
*get_
str
ing_2(){
char
*p = "hello world!";return p;}int main(){
char
*p;p = get_
str
ing_1();printf("g...
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章