prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 5.19

Q我如何访问位于机器地址 0 的中断向量?如果我设置一个指向0,编译器可能会将其转换为某个非零的内部空指针值。


A由于位置 0 的任何内容显然都与机器有关,您可以自由使用任何有效的与机器相关的技巧来访问它。请阅读您的供应商文档(并参阅第 19 节)。如果访问位置 0 对您来说有任何意义,那么系统很可能设置为相对容易地做到这一点。一些可能性包括:

  1. 直接将指针设置为0。(这是不一定有效的方法,但如果它有意义,它很可能会奏效。)
  2. 将整数0赋值给一个int变量,并将该int转换为指针。(这也不能保证有效,但很可能有效。)
  3. 使用联合体设置指针变量的位为 0
    	union {
    		int *u_p;
    		int u_i;	/* assumes sizeof(int) >= sizeof(int *) */
    	} p;
    
    	p.u_i = 0;
    
  4. 使用memset设置指针变量的位为 0
    	memset((void *)&p, 0, sizeof(p));
    
  5. 声明一个外部变量或数组
    	extern int location0;
    
    并使用汇编语言文件,或某些特殊的链接器调用,安排该符号指向(即变量放置在)地址 0。

另请参阅问题 4.1419.25

参考文献:K&R1 第 A14.4 节,第 210 页
K&R2 第 A6.6 节,第 199 页
ISO 第 6.3.4 节
Rationale 第 3.3.4 节
H&S 第 6.2.7 节,第 171-2 页


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管