double a[3]={1,2,3};
printf("%d",sizeof((int)a)/sizeof(&a[1]));这样写为什么可以
printf("%d",sizeof((double)a)/sizeof(a[1])); 为什么无法从“double [3]”转换为“double”
int a[3]={1,2,3};
printf("%d",sizeof((int)a)/sizeof((int)a[1]));这样写为什么可以
printf("%d",sizeof((int)a)/sizeof(&a[1]));
答案:2 悬赏:20 手机版
解决时间 2021-02-13 00:13
- 提问者网友:锁深秋
- 2021-02-12 08:03
最佳答案
- 五星知识达人网友:你哪知我潦倒为你
- 2021-02-12 08:55
强制类型转换并不是“全能”的,就是说这种转换对某些类型转换为另一种类型是不能操作的。这题目中的错误提示已经说得很明确:不能将“double [3]”转换为“double”,意思就是不能把一个双精度数组地址值转换为浮点数——实践中,把地址值转换为浮点有何意义?但转换为int是有意义的,所以只允许(int)a而不允许(double)a。若确实需要强制为double型,那可以这样写(double)(int)a——因为地址强制为int型是合法的,而int型强制为double型也是合法的。上述这些可能还与编译器有关,有的编译器也许会允许地址直接强制为浮点型的。
全部回答
- 1楼网友:青灯有味
- 2021-02-12 09:57
int *a,*b,*c;这个是定义三个指向int的指针。。。
a=b=c=(int*)malloc(sizeof(int)); 分配一个保存int的空间。。。。相当于这个时候a,b,c是指向内存中同一个空间的。。。
*a=1;*b=2;*c=3;a=b;
执行*a = 1时,*b,*c也都是1
同样的执行*b = 2时,*a,*c也都是2
最后*c=3;,*a,*b也都是3
因为它们三个指向的是同一个空间。。。。所以取值是相同的。。。
希望对你有帮助。。。。仍有问题可以hi我。。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯