首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组视为单个变量

将数组视为单个变量
EN

Stack Overflow用户
提问于 2014-06-19 17:42:40
回答 1查看 184关注 0票数 2

代码1:

代码语言:javascript
复制
   .
   .
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:

代码语言:javascript
复制
    .
    .
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:

我已将代码更改为:

代码语言:javascript
复制
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、ch11、ch12视为24位的单个内存块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-19 18:00:17

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

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24313069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档