【发布时间】:2014-08-10 08:57:40
【问题描述】:
代码 1:
.
.
int main()
{
char ch1[3];
ch1[0]=ch1[1] = NULL;
ch1[2]=0x01;
ch1[2] = ch1[2]<<2;
printf("%u", ch1[2]);
system("PAUSE");
return 0;
}
.
.
code:1 的输出是 4(如预期的那样)。
代码 2:
.
.
int main()
{
char ch1[3];
ch1[0]=ch1[1] = NULL;
ch1[2]=0x01;
*ch1 = *ch1<<2;
printf("%u", ch1[2]);
system("PAUSE");
return 0;
}
.
.
但是 code:2 的输出却是 1 出乎意料!在代码:2 的第 6 行中,所做的修改将 ch1[2] = ch1[2]<<2; 更改为 *ch1 = *ch1<<2;。我尝试将 char 数组视为一个数值并完成了<< 操作;我相信我的方法是不正确的。是否有任何正确的方法可以将数组视为单个数值来进行基本的数学运算?
更新 1:
我已将代码更改为以下内容:
int main()
{
char ch1[3];
ch1[0]=ch1[1] = NULL;
ch1[2]=0x01;
*(ch1+2) = *(ch1+2)<<9;
printf("%u", ch1[1]);
system("PAUSE");
return 0;
}
现在我得到输出:0。我不应该得到输出 2(即 2^(9-8))吗?仍然,如何将数组视为单个数值?
对;但我的实际问题是是否可以将数组视为单个值;也就是说,将 ch1[0]、ch1[1]、ch1[2] 视为 24 位的单个内存块。
【问题讨论】:
-
使用
*ch1和ch1[0]是一样的。 -
不,您必须遍历每个元素。
-
在您的第二种方法中,您应该使用
*(ch1 + 2)使其与第一种方法一致。 -
您是否尝试跨字符边界移位?
-
你不知道
<<做了什么。阅读有关 c 运算符的信息。
标签: c arrays pointers operators