将数组视为单个变量

时间:2014-06-19 17:42:41

标签: c arrays pointers operators

代码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;
}
     .
     .

代码输出: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;
}
      .
      .

但是代码输出:2是1,不是预期的!在代码的第6行:2,完成的修改正在将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位的单个存储块。

1 个答案:

答案 0 :(得分:2)

指针的类型是重要 ch1类似于指向char- char*的指针。当您执行*ch1时,您正在引用ch1指向的字符。如果你想将整个数组视为一个数字,你需要将它转换成一个整数,这也是有问题的,因为你的数组有3个字节,一个整数有4,所以示例中的x的顶部字节下面指的是,实际上是未定义

int main()
{
    char ch1[3];
    ch1[0]=ch1[1] = 0;
    ch1[2]=0x01;
    int *x = (int*)ch1;
    *x <<= 2;
    printf("%u", ch1[2]);
    system("PAUSE");
    return 0;
}