首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数组强制转换成结构体指针,结构体内部指针的指向有关问题

2012-03-15 
数组强制转换成结构体指针,结构体内部指针的指向问题结构体定义:typedefstruct{longcrcchar*data}env_t在

数组强制转换成结构体指针,结构体内部指针的指向问题
结构体定义:
typedef   struct
{
        long   crc;
        char   *data
}env_t

在某个函数中
void   fun(void)
{
        char   *p;
        short   ary_sdramenv[1000];

        copy();       //将1000个数据复制到ary_sdramenv[]

        p   =   ((env_t*)ary_sdramenv)-> data;       //问题在此处
}

问题是:指针p指向何处?
我以为p是指向ary_sdramenv[2]、ary_sdramenv[3]的值所构成的地址,但实际却是指向ary_sdramenv   +   2。编译器是arm-elf-gcc,编译器版本2.95.3。
但我不清楚为什么会这样,请高手们不吝指教!  


[解决办法]
to fetag(过儿思念小龙女) ( ) 信誉:100
---------------------------------------
p是指针,ARM32位,占据5,6,7,8字节,当然是

Treazy(活着),
p(32位)应该指向的就是ary_sdramenv[2]和ary_sdramenv[3]内容组成的地址
[解决办法]
我很想知道LZ你是怎么在 copy() 的这个函数里访问 ary_sdramenv 为首地址的这段数组内存的,貌似你也没有把ary_sdramenv作为参数传进去。
[解决办法]
lz是不是那里弄错了。
我写了这样的代码进行测试:

#include <stdio.h>
#include <string.h>

typedef struct {
long rcr;
char *data;
}env_t;

int main()
{

char *p = NULL;

short ar[100];

memset(ar, 0x12, sizeof(short) * 100);

p = ((env_t *)ar)-> data;

printf( "ar address: %x\n ", ar);
printf( "p address: %x\n ", p);

return 0;
}


输出结果是:
ar address: bfc6029c
p address: 12121212

p正是指向ar[2]、ar[3]的值所构成的地址,而不是指向ar + 2。可以自己设置ar[2],ar[3]来观察。
我用的是: gcc version 4.0.2 20050901 (prerelease) (SUSE Linux)

热点排行