【发布时间】:2011-01-13 18:48:42
【问题描述】:
以下转换安全吗?
int b[10][10];
char *x;
int a[]={0,1,2,3,4,5,6,7,8,9};
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
b[i][j]=a[i];
for(x=(char *)&b[0];x<=(char *)&b[9][9];x+=sizeof(a+1)) // Problem lies here!
printf("%d\n",*x);
我不认为for 循环中的上述转换是安全的(我认为它取决于平台)。如果我错了,请纠正我。我很惊讶,因为即使使用 gcc 中的-Wall -pedantic 选项编译,代码编译时也没有给出任何警告。
【问题讨论】:
-
我认为这是一个错误的 b。不过我可能是错的......
-
a有 9 个元素,您正在访问a[9]。您还缺少一个分号。因此,您还需要两个“问题在于 cmets”:-) -
不过,我没有投反对票 - 这些都是小错别字。
-
我不小心投了赞成票,然后不小心点击了向下按钮,而不是重新点击了向上按钮来撤消我的赞成票。现在系统不会让我收回我的投票了。
-
@Prasoon:在这种情况下,
for标头后面的分号错误。printf显然是为了成为循环的主体。
标签: c pointers type-conversion type-safety