代码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,这是不可预料的在代码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类似于指向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;
}

关于c - 将数组视为单个变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24313069/

10-11 05:40