C语言中(short*)NULL + 10 = ?

来源:百度知道 编辑:UC知道 时间:2024/06/24 14:29:35
C语言中(short*)NULL + 10 = 多少
为什么??

给指针增加值,实际是给他地址加值,地址的增加是根据地址类型的,
比如在vc6.0下给int指针加10实际地址值是增加了4*10

在vc函数库的stdio.h文件中有如下定义:

/* Define NULL pointer value */

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

在c环境下,NULL被定义为((void *)0),这里void *表示任意类型的指针,0表示指向地址0。
当NULL被显示强制转换为(short*)NULL类型指针后,NULL也就变为了短整型指针。

(short*)NULL+10表示从0地址偏移了10个short型数据的地址。也即是0+10*2=20.

先看NULL的定义
#define NULL (void *)0

结果应该是10*sizeof(short)

Key: 4
因为(short*)NULL是一个指向短整型的地址,加上10只不过是同类型地址值增加了,也就是说指向了值更大的地址。如果(short*)NULL指向的地址假设为m,则(short*)NULL + 10指向的地址为m+20,但本表达式的本质仍旧是指针。

正解
20