*char(**)与(char*)的区别

 我来答
小sun在线解答
2018-12-07 · 怀念过去,却不能停下向前的脚步。
小sun在线解答
采纳数:4 获赞数:1757

向TA提问 私信TA
展开全部

*char(**)与(char*)的区别,举例如下:

1、char *a = "hello" 中的a是指向第一个字符‘a'的一个指针

2、char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针

但二者并不相同:看实例:把两个字符串相加

显示结果:hello0123456789

对比:

显示结果:segmentation fault

把字符串加到指针所指的字串上去,出现段错误,本质原因:*d="0123456789"存放在常量区,是无法修的。而数组是存放在栈中,是可以修改的。两者区别如下:

1、 ”读“ ”写“ 能力

char *a = "abcd";  此时"abcd"存放在常量区。通过指针只可以访问字符串常量,而不可以改变它

而char a[20] = "abcd"; 此时 "abcd"存放在栈。可以通过指针去访问和修改数组内容

2、赋值时刻

char *a = "abcd"; 是在编译时就确定了(因为为常量)

而char a[20] = "abcd"; 在运行时确定

3、 存取效率

char *a = "abcd"; 存于静态存储区。在栈上的数组比指针所指向字符串快。因此慢

而char a[20] = "abcd"; 存于栈上

xiziufo
2012-07-28 · TA获得超过132个赞
知道小有建树答主
回答量:103
采纳率:100%
帮助的人:80.5万
展开全部
首先我们知道一点,*代表取值符。
其次,我们要明白一点,以为*p可指向以为数组,**p指向二维数组,***p指向三维数组......
最后()在不同的情况下有不同的含义。好现在开始讲解*char(**)与(char*)的区别
1、*char(**)应该表示一个指向二维数组的指针,其效果等同于一个三维数指针
2、(char*)我给出以下两种含义:
a、可定义一个字符型指针
b、将当前对象显示转换为字符指针类型
PS:希望对楼主有帮助。如有必要,希望楼主讲问题描述清楚,多放点代码进来,让我们知道这两句代码是在什么情况下的,因为往往不同环境下,相同代码有不同的含义。
追问
void stringFree (void * elem) {
free( * char( **) elem);
}
这个函数是用c写的范型stack中的一个小函数,在此范型stack中要存储的数据的类型是字符串,* char( **)中前一个*是对后面括号里的一个*的解引用,所以它不是三维指针,不过我已经知道了,char(**)是对当前地址进行强转为指向二维数组的指针,然后前面的*进行解引用来得到这个指针的内容(即这个地址),这样通过free函数就可以释放其中的一个数据的内存了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
274603882
2012-07-29 · TA获得超过123个赞
知道答主
回答量:236
采纳率:0%
帮助的人:239万
展开全部
*char(**) 表示接收参数为双指针,并且返回值为指向char型的指针的函数。(char *)表示强制转化如:void *p; (char *)(p);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GiraKoo
2012-07-28 · 还没有任何签名哦
GiraKoo
采纳数:3949 获赞数:11110

向TA提问 私信TA
展开全部
你这个好复杂啊。
*char (**p);这是你希望的例子吗?
这个形式是不正确的声明。

你能举个例子吗?说说你见过的这个类型是怎么声明的。
追问
这是在用c语言实现范型时用到的
追答
没见过你这种用法。不好意思。没有帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友60dcc3d
2012-07-29 · 超过18用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:45.2万
展开全部
具体到代码起作用各不一致
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式