1 void * 类指针 不是已说明了是void 类型?
2 那你说指向函数的指针是什么类型?(说类型是“函数指针类型”,这可不行哦!)
[此贴子已经被作者于2006-7-14 13:54:19编辑过]
实际上,不存在指向数组的指针,只存在指向数组第一个元素的指针。
所以,在有些严格的编译器,比如TC类,
你这样是非法的:
char ch[2][3]={'a','b','c','d','e','f'};
char *p=ch; //会警告
规范的是:char *p=ch[0];
对于“类型”这一概念,其含义是多种多样的:
至少:
1 对于一般变量和常量,是表示内存的占据容量,比如 INT 占据两个字节等等。
2 对于指针就是指他指向的数据类型,这用来进行地址运算的。如果是指向INT ,那么指针+1就是移动2个字节。。。
而不是他本身占据的容量。
因为,不管指向什么类型,指针的容量都是 unsigned long(这样,指针最大可指向2的32次方的内存,即4GB内存)
所以,实际上指针就是一个unsigned long变量。
所以,既然这样,你也可以把一个普通的unsigned 的整形变量强迫为一个指针,他就可以指向一个内存地址了:
unsigned int a=12345;
char *p=(char *)a;
当然,内存12345处是个不可知数。
如果你对内存很了解,你可以这样查看内存,甚至修改内存值(仅限于纯DOS)
补充: 如果指针指向函数:
int func(char c)
{
...
}
int (*p)();
p=func;
这种情况,C语言并没有给他加上什么帽子,就是没有给他什么类型了。看他前面就是一个*号,
前面的int 可不是他的类型,而是函数的类型。
[此贴子已经被作者于2006-7-14 15:36:40编辑过]
int a[3][5]={...};
int (*p)[5]=a;
这在TC系列中是会警告的: suspicios pointer conversion 可疑的指针转换
在VC等不严格遵守C规范的编译器就没警告。。