| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1243 人关注过本帖, 1 人收藏
标题:[讨论]ANSCI C标准里CONST指针相容问题
只看楼主 加入收藏
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
结帖率:100%
收藏(1)
 问题点数:0 回复次数:8 
[讨论]ANSCI C标准里CONST指针相容问题

在一本书上看到的 foo(const char **p){}
.......
main(int argc,char **argv)
{

.....;
foo(argv);
}
编译时发出警告

char *与const char *是相容的 char *p;

const char *cp;

cp=p;
但是 p=cp的话就不行;
但是为什么? const char ** qp;

char **qqp;

qp=qqp; 就不行呢?

[此贴子已经被作者于2006-7-21 13:26:18编辑过]

搜索更多相关主题的帖子: ANSCI CONST 指针 相容 
2006-07-21 12:58
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
C编程专家?

为什么不继续往下看呢..下面说的很明白!

最后的一个问题是废话?
既然你知道P=CP不可以.
那么.当然的 qp=qqp也是不可以的

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-21 17:23
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 
是这本书,我理解不了他说的相容不能传递,既然*qp=*qqp可以   怎么 qp=qqp不行 在二级指针const修饰的是char么?还是char *?  我的理解是如果修饰的是char 那么就是值不能被改变,地址是可以的,一级地址*qp可以,那么二级地址qp应该也可以,如果是char*那么就和第一种情况一样 我那里错了,烦请指教谢谢(我说的一级地址*qp   二级地址qp可能有问题,可能说反了,因为不确定说法,要是错了,请指出)

[此贴子已经被作者于2006-7-22 13:20:08编辑过]


2006-07-22 13:08
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
#include<stdio.h>
int main()
{
char p='a';
char *p1=&p;
int q=5;
int *q1=&q;
q=p;
p=q;
*q1=*p1;
*p1=*q1;
q1=p1;
p1=q1;
}

去测试下这段代码..按你的理解..是不是p1=q1或者q1=p1也是应该相容的?

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-22 18:12
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
收藏
得分:0 
哦~:)懂了,谢谢斑竹
2006-07-24 12:29
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:353
专家分:222
注 册:2006-4-11
收藏
得分:0 

char *与const char *是相容的
char *p;
const char *cp;
cp=p;

老大我有点不明白啊 cp和p都是char型指针啊 const只是个修饰作用 他们都是同一类型的指针为什么不可以呢?

#include<stdio.h>
int main()
{
char p='a';
char *p1=&p;
int q=5;
int *q1=&q;
q=p;
p=q;
*q1=*p1;
*p1=*q1;
q1=p1;
p1=q1;
}
这个例子中p1和q1是不同类型指针要强制转换后才能赋值啊?这两个是不同的吧


2006-07-26 11:03
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

char *p;
const char *cp;
cp=p; //可以
p=cp //不可以

因为 char(无限制) 包括 const char的限定..所以 可以赋值,也就是说 char包括了const

而 const char 并没有 char的限定..所以 不可以赋值,也就是说const是只读 他不可写.而char是可写的.你不可以把可写的类型赐赋给不可写的类型.所以这是错误的



[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-26 11:15
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用hao0716在2006-7-26 11:03:39的发言:

这两个是不同的吧

我这个例子是解释的 **qp与**qqp为什么不能相互赋值(地址值)


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-26 11:18
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:353
专家分:222
注 册:2006-4-11
收藏
得分:0 
eeeeeeee 原来是这样啊  明白了 谢谢~~~~~

2006-07-26 14:24
快速回复:[讨论]ANSCI C标准里CONST指针相容问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047070 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved