C 语言中char* 和const char*的区别

有一个函数这样定义char*findArg(char*){.....}定义一个constchar*USERNAME="su";调用时char*name=findArg(U... 有一个函数这样定义 char* findArg(char *){.....}
定义一个const char *USERNAME = "su";
调用时
char *name = findArg(USERNAME);
会报错,说const char *和char*不能转换。
但是这样
char *name = (char *)findArg(USERNAME);
就OK了
是不是见鬼了!
findArg前面(char *)是你说的“C的隐式类型转换”
转换谁呀

baqktdgt 说对了,可能是编译器太好了(IBM的XLC),findArg真正返回的是const char *型,尽管定义的是char* 型!
fuck C!
展开
 我来答
写在枫叶上的故事
2018-12-09
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部

C 语言中char* 和const char*的区别:

一、含义的区别

char* 表示一个指针变量,并且这个变量是可以被改变的。

const char*表示一个限定不会被改变的指针变量。

二、模式的区别

char*是常量指针,地址不可以改变,但是指针的值可变。

const char*是指向常量的常量指针,地址与值均不可变。

三、指针指向的内容的区别

char*指针指向的内容是可以改变的,是不固定的。赋值后在数据传递的过程中允许改变。

const char*指针指向的内容是固定的,不可改变的。对传入的参数,不会对指针指向的内容进行修改

四、意义的区别

char* str确保str这个指针不会改变,但是这个指针里面的内容可以改变。

const char* str确保*str的内容不会改变,也就是用str这个指针无法改变str这个指针指向的地址的内容,但是可以改变这个指针。

参考资料来源:百度百科——CONST (C中的CONST)

baqktdgt
2010-04-07
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
const char *p = "123";

p[1] = '3'; // 会报错
p = "456"; // 不会报错

const char * 只是说指针指向的内容不可变,但指针本身可以再赋值

假设你的程序是
char * findArg(char *s) {
return s;
}

这个时候,你如果传const char *进去,那么好一些的编译器,会知道,你传回的函数返回值,也是const char *,也就是指针指向的内容不可写。

所以如果你传进去的是const char *,最好还是把 char *name写成const char *name,因为char *name可以对指针指向的内容进行修改。

用强制转换当然也可以,但是
const char *name2 = "123";
char *name = (char *)name2;
如果你对name指向的内容进行改变,如 name[2] = '4';
"123"是常量,对常量进行修改,你的程序就会发生不可预知的错误

char* findArg(char *){.....}
如果你这个函数,对传入的参数,不会对指针指向的内容进行修改,最好写成 char * findArg(const char *) {....}
或 const char * findArg(const char *) {....}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9df37c8
2010-04-07
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
const char* 是常量,一旦赋值就不允许改变。

char* 是变量,赋值后允许改变。

这么说应该很清楚了吧?
“调用时
char *name = findArg(USERNAME);
会报错,说const char *和char*不能转换。
但是这样”

这种调用保存是正常的,因为有的函数要求你传入一个函数内部可修改的内存地址。
你要非要传个const char*,就需要用C的隐式类型转换。
“char *name = findArg(( char* )USERNAME);”
但这么做极其不推荐。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-04-07
展开全部
不是见鬼了。。。
1. const char * 和 char *
后者可以赋值给前者,前者不能赋值给后者。
这是C标准里规定的。
你想想const作用是什么?如果把一个const修饰的赋值给一个没有const修饰的,会有什么后果?

2. char *name = (char *)findArg(USERNAME);
应该还是不可以吧。这个只是把返回类型强制转换,又没把参数强制类型转换。。。我试过之后再告诉你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
申绮山3w
2019-12-23
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
C 语言中char* 和const char*的区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式