读书人

数组强制转换成结构体指针结构体内部

发布时间: 2012-03-15 11:50:38 作者: rapoo

数组强制转换成结构体指针,结构体内部指针的指向问题
结构体定义:
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)

读书人网 >C语言

热点推荐