为什么指针要定义类型

为什么指会要定义类型?这个问题是一个值得思考的问题。

我们在写c/c++程式的时候都知道,定义每个变量都要告诉编译器类型,这种就是强类型语言。比如

int i; long a;doubl c;  int* p;float* c;

哪下面来想一下,如果定义指针时不指定类型会怎样。

void* q; void*p;

对,这样完全可以编译没有一点问题,因为指针在内存中都是固定大小,4字节,不管是int*,float*,double*,还包括自定义类型指针。

下面是测试代码:主要用到sizeof关键字获取

测试结果:

p指针大小:4
a指针大小:4
c指针大小:4
v指针大小:4
n指针大小:4

以上大家会认为可以定义不指定类型的指针了。前提是这个指针只做记录地址,不做任何计算。

为什么这样讲,因为只做地址记录是没有问题的,都是4字节,在内存中的数据都一样。如果一但做了运算就会错乱。

这里再讲下,指针的运算。

指针是可以做四则运行  加  减   乘  除。  将指针当成变量就很好理解这样事情。例如:

int a[2]={0,1};

a[0]=a[0]+1;  

 a[0]=a[0]-1;

int* p = &a;    (如果p类型改成 void*,下面的加减运算将不能编译)

p = p+1;

p = p-1;

只是指针的加,减意义是,地址值加减一个类型距离。 指针乘  除也可以做,只是没有意义,因为乘  除完后这个地址到底指的是什么就不知道。(如果你的程式设计指针乘  除后地址是有意义的,哪么也是可以用的,但一般很少有这样用的)

一个类型距离:这个就是为什么定义指针一般都声名类型的原因。

注:当你可以得到喜欢女孩家的地址时,你怎是不会 就停在得到地址阶段,这也就是为什么一般声明时会不用void*。有时退一步换个角度去理解也许问题并没有哪么难。


发表评论

电子邮件地址不会被公开。 必填项已用*标注