| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2084 人关注过本帖
标题:求助:强制转换指针类型
只看楼主 加入收藏
lichence
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2009-10-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
求助:强制转换指针类型
程序如下:
#include<stdio.h>
int main()
{
    char uData[50];
    short cOut;
    int i;
    for(i=0;i<50;i++)
    {
      uData[i]=i;
    }
    cOut=*(short *)((int *)uData+1);
    printf("%d\n",cOut);
}

输出结果:1284

哪位大侠可以给我解释一下为什么输出这个结果?
再解释下cOut=*(short *)((int *)uData+1);的具体作用。鸣谢!
搜索更多相关主题的帖子: 指针 类型 
2009-10-28 19:12
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:10 
0 1 2 3 4 5 6 7 8 9 ... 50

cOut=*(short *)((int *)uData+1);

(int *)uData + 1 == uData + 4

*(short *)(uData + 4);  == 0x0504 == 1284;

Intel CPU 按高高低低顺序存储数据,我不想做解释,自己网上查。



[ 本帖最后由 cosdos 于 2009-10-28 19:39 编辑 ]

—>〉Sun〈<—
2009-10-28 19:37
dengjun000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2009-10-14
收藏
得分:0 
其实我很不是理解 这个赋值的是什么东西?
    for(i=0;i<50;i++)
    {
      uData[i]=i;
    }
我刚才试了试这个程序
#include <stdio.h>
 
main()
{
  char a[20];
  int i=0;
  for(i=0;i<19;i++)
  {
    a[i]=i;
  }
  a[19]='\0';
  printf("%s",a);
  getch();
} 结果没法显示。。希望高手帮帮忙 说说怎么回事
2009-10-28 19:38
dengjun000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2009-10-14
收藏
得分:0 
希望2楼再解释详细点 不胜感激
2009-10-28 19:41
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
以下是引用dengjun000在2009-10-28 19:38:32的发言:

其实我很不是理解 这个赋值的是什么东西?
    for(i=0;i<50;i++)
    {
      uData=i;
    }
我刚才试了试这个程序
#include <stdio.h>
 
main()
{
  char a[20];
  int i=0;
  for(i=0;i<19;i++)
  {
  ...

字符串第一个元素都'\0'了,后面还怎么会显示出来。

—>〉Sun〈<—
2009-10-28 19:41
dengjun000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2009-10-14
收藏
得分:0 
谢谢5楼。
2009-10-28 19:45
lichence
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2009-10-6
收藏
得分:0 
回复 5楼 cosdos
希望解释清楚一点……
2009-10-28 19:47
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
0 1 2 3 4 5 6 7 8 9 ... 50
cOut=*(short *)((int *)uData+1);  
(int *)uData + 1 == uData + 4
*(short *)(uData + 4);  == 0x0504 == 1284;

指针加法是这样的

(int *)uData + 1 等于 uData + sizeof(int)
sizeof(int)等于4; int大小为 4个字节,char 大小为 1个字节。
故为了指向下一个元素,指针指需要加上4。

我就用一句话概括吧,指针加1,等于指针值加上该类型的大小。



—>〉Sun〈<—
2009-10-28 19:51
快速回复:求助:强制转换指针类型
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050644 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved