赋值表达式中不同数据类型相互赋值的问题
为什么这个编译能通过的啊 int main(int argc, char* argv[]) { char **p=0; char **q=p; return 0; } 而这个就不行啊 int main(int argc, char* argv[]) { char **p=1; char **q=p; return 0; } |
[此贴子已经被knocker于2005-12-11 12:48:24编辑过]
----------------解决方案--------------------------------------------------------
int main(int argc, char* argv[])
{
char **p=(char **)1;// 0是一个特殊的值,即为NULL
char **q=p;
return 0;
}
----------------解决方案--------------------------------------------------------
还是不懂,班主说什么呢??
char **p=1;
是不是等于char **p;p=1;啊??
----------------解决方案--------------------------------------------------------
是的,这只是一个赋值表达式中数据类型不对称的问题,只要强制转换就可以了。
----------------解决方案--------------------------------------------------------
int main(int argc, char* argv[])
{
char *p=0;
int i=p;
return 0;
}
与这个的错是一样的道理
----------------解决方案--------------------------------------------------------
int i=int(p);
p是一个地址;难道不可以是int 类型吗??
----------------解决方案--------------------------------------------------------
有点明白了,p其实是有直的,
可能是123456,435566........
只能把地址给p
----------------解决方案--------------------------------------------------------
以下是引用layabout在2005-12-11 12:52:00的发言:
int i=int(p);
p是一个地址;难道不可以是int 类型吗??
int i=int(p);
p是一个地址;难道不可以是int 类型吗??
p的确是个int 数值,其实,任意型式的数据在内存中都以0,1表述。
同样的内存单元
1111111111111111 如果定义为int型,它是表示多少?
如果定义为unsigned int 它又是表示多少?
如果定义为float它又是表示多少?
。。。。。。。
理解上面的这个问题有助你理解本问题为什么要强制转化的原因。
----------------解决方案--------------------------------------------------------
16个1 int 型是-32768
unsigned int 是65535
float 是不知道.......
----------------解决方案--------------------------------------------------------