void指针为无类型指针,可以指向任何类型数据。
作用
C语言中引入void指针类型在于两个方面
- 对函数返回的限定
- 对函数参数的限定
注意:void类型指针可以接受其他数据类型指针的赋值,但如果需要将void指针的值赋给其它类型的指针,则还是需要进行强制类型转换。
void *p; //作用是存放一个地址
一个指针占几个字节的问题,取决于计算机的位数和地址总线的宽度。
一般来说,一个指针在32位的计算机上,占4个字节;
一个指针在64位的计算机上,占8个字节。
指针就是地址,地址就是指针。
地址是内存单元的编号,用来表示内存中的位置。
地址总线是CPU和内存之间的通道,用来传输地址信息。 地址总线的宽度决定了CPU的寻址能力,也就是能够访问的内存空间大小。
假设地址总线的宽度是n位,那么每个地址就需要n个二进制位来表示,也就是n/8个字节。
因此,一个指针就需要n/8个字节来存储。
例如,在32位的计算机中,地址总线的宽度是32位,那么每个地址就需要32/8=4个字节来表示。所以,在32位的计算机中,一个指针占4个字节。
同理,在64位的计算机中,地址总线的宽度是64位,那么每个地址就需要64/8=8个字节来表示。 所以,在64位的计算机中,一个指针占8个字节。
#include<stdio.h>
void main(){
int a=10;
int *p1=&a; //定义整型指针p1并初始化
void *p2=p1; //定义void指针p2并赋值
int *p3;
p3=(int*)p2; //强制类型转换
printf("*p1=%d\n",*p1); //输出这些指针各自指向的值
printf("p2=%d\n",p2);
printf("*p3=%d\n",*p3);
}