如何在把数组地址指向0xFFFFFF处?
char array[100];
如何在把数组array地址指向0xFFFFFF处?
问题点数:50、回复次数:17Top
1 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2005-11-01 19:25:30 得分 0
数组名是不可以更改地址的.Top
2 楼doway(john)回复于 2005-11-01 19:27:17 得分 0
不成吧?我猜。Top
3 楼jsjjms(专心研究嵌入式)回复于 2005-11-01 20:19:38 得分 0
定义了一个数组,那么其地址已经固定了吧?Top
4 楼cleanduo(子风)回复于 2005-11-01 20:38:56 得分 0
bu zhi daoTop
5 楼goodluckyxl(被人遗忘的狗)回复于 2005-11-01 21:15:45 得分 0
char array[100];
//你在嵌入式编译器下可以设置 好像+at×××可以指定地址
//而在PC下都使用虚拟地址 而且数组都作为const在函数入口处就给出了栈地址
//是无法修改的
char* array可以指向你要的地址 但是也只是虚拟地址Top
6 楼codearts(代码艺术)回复于 2005-11-01 21:28:26 得分 0
我目前知道的是:不行
Top
7 楼wuwen19(按时打发)回复于 2005-11-01 21:29:51 得分 0
markTop
8 楼wuwen19(按时打发)回复于 2005-11-01 21:39:43 得分 0
应该是不可以的。。。
main()
{
char str[100];
long i;
printf("str addr = <%x>\n",str);
printf("str addr = <%d>\n",str);
printf("0xffffff = <%d>\n",0xffffff);
i = (int)&str[0] - (int)0xFFFFFF ;
printf("i = <%d>\n",i);
str - i ;
printf("str addr = <%x>\n",str );
printf("str -i addr = <%x>\n",str - i );
}
Top
9 楼foxdeng(江洋大刀)回复于 2005-11-02 10:01:53 得分 0
完全可以啊,使用关键字const就可以达到要求,你可以把代码写成这样:
char * const array=(char *)0xffffff;
array就成了一个常指针,可以完全看成一个数组,而且,任何试图改变array的代码,都会让编译器报错Top
10 楼wuwen19(按时打发)回复于 2005-11-02 10:26:22 得分 0
他是想把定义好的一个数组地址,在程序过一段时间后在一个特定时刻付成0xffffff
刚开始的时候又不想0xffffff,
怎么办?Top
11 楼Zark(金陵五月)回复于 2005-11-02 11:04:21 得分 0
实现这一"奇怪"要求的目的是什么?
Top
12 楼foxdeng(江洋大刀)回复于 2005-11-02 11:24:26 得分 0
那种做法是错误的,如果我手下的程序员喜欢这么做,我的第一反应就是:解雇!Top
13 楼eastnofail(Char *)回复于 2005-11-02 11:53:42 得分 0
楼上真是牛人!!中国未来的BILL啊!!!振兴民族软件业的希望!!Top
14 楼ugg(逸学堂(exuetang.net))回复于 2005-11-02 12:02:24 得分 0
C++机制中有一种机制叫“放置机制”
用来解决两种问题
1:把你的定义对象放到指定地址上去。
2:在指定地址上定义你的对象。
给出的方法如下
void *p = (void)0X0008f;
A *p1 = new (p)A
下面方法是
重载一个new,把X对象放到(a1)对象地址内;
class Arena { public: void* allocate(size_t); void deallocate(void*);
// ... };
void* operator new(size_t sz, Arena& a) { return a.allocate(sz); }
Arena a1(some arguments); Arena a2(some arguments);
现在我们可以写:
X* p1 = new(a1) X;
Y* p2 = new(a1) Y;
Z* p3 = new(a2) Z;
Top
15 楼codearts(代码艺术)回复于 2005-11-03 15:35:54 得分 0
楼上的只不过是placement new而已,并未达到在0xfffff申请一个数组的功能
void *p = (void)0X0008f;
A *p1 = new (p)A; //p指向的这块内存地址又不是你的,怎么能乱写?
Top
16 楼Eastunfail(龍子龍孫) (Serpent's Embrace)回复于 2005-11-03 15:47:14 得分 0
Win32 API:
LPVOID VirtualAlloc(
LPVOID lpAddress, //这个参数指定分配的内存在哪个地方
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
char *p=VirtualAlloc((LPVOID)0xffffff,100,MEM_COMMIT,PAGE_READWRITE);
于是就在0xffffff分配了char p[100]了
Top
17 楼megatops(猪哥)回复于 2005-11-03 15:51:39 得分 0
用指针吧,这种情况何必用数组。Top




