1.普通指针 普通指针即最常见的如:int * 、 char*等 甚至于也可将一个数组如arr[5]的数组名arr看作是指针类型(因为指针本质上就是地址,而arr 是该数组首元素的地址) 但是值得注意的是 sizeof (arr) 与&arr两种情况所代表的是整个数组的地址,首元素地址和整个数组地址在值上虽然相同,但在各自+1、-1操作...
6️⃣ void指针:这种指针类型用于指向任意类型的内存地址。虽然它不直接指向具体的数据类型,但在某些情况下非常有用。例如:```c void* p = malloc(10); // p是一个void指针,指向动态分配的内存块的首地址 char* str = (char*)p; // 将p强制转换为char类型的指针,指向内存块中的第一个字符'H' ``...
我们说p是指向type类型的指针,type可以是任意类型,除了可以是char,short, int, long等基本类型外,还可以是指针类型,例如int *, int **, 或者更多级的指针,也可是是结构体,类或者函数等。于是,我们说: int * 是指向int类型的指针; int **,也即(int *) *,是指向...
这里我们可以看到, void* 类型的指针可以接收不同类型的地址,但是无法直接进行指针运算。 4.二级指针 二级指针概念:存放一级指针地址的指针(本质上还是地址) 至于是跳过4个还是8个字节取决于当前是几位的操作系统。 5.数组指针 数组指针概念:存放的是数组的地址,是能够指向数组的指针变量。 上图p2就是数组指针变量...
由此就可以引出我们的一个空指针类型,也就是万能指针:void * 这个叫做空指针类型,也称之万能指针,万能指针可以保存任意类型变量的地址,也可以将万能指针保存的地址值,赋值给任意类型的指针变量 但是要注意:万能指针,同样不能做取值的操作,因为不知道取多少字节的数据 ...
我们说p是指向type类型的指针,type可以是任意类型,除了可以是char,short, int, long等基本类型外,还可以是指针类型,例如int *, int **, 或者更多级的指针,也可是是结构体,类或者函数等。于是,我们说: int * 是指向int类型的指针; int **,也即(int *) *,是指向int *类型的指针,也就是指向指针的指针;...
利用void 类型指针,可以指向任意类型指针。 1 //基本代码 2 void* p; 3 p = (void*) "HelloWorld"; 4 5 char* str; 6 str = (char*) p; 7 8 printf("%s",str);//输出 HellWord 通过这个我们就可以实现抽象性,让数据结构或函数不再与特定的类型高耦合。
类型名可以是任意C语言的变量类型,它指明该指针指向变量的类型。星号(*)间接运算符,表明指针名是一个指向类型名类型的指针,不是类型名类型的变量。 例如: char *c1,*c2; // c1,c2都是指向char类型的指针 double *v1,v2; // v1是指向double类型变量的指针,v2是普通的double类型变量 ...
这是因为指针变量存储的只是指向的变量的内存地址,如果没有区分类型,当需要从内存中取值的时候,系统就不知道你要从当前指向的地址取几个字节。如果字节数没取好,那么取得的数据就会产生错误。下面模拟一下如果没有类型,任意取值的结果:运行结果:只取1个字节的值:21只取2个字节的值:-13035取了4个字节的值...
void*类型指针 void是一种特殊的指针类型,可以用来存放任意对象的地址。一个void指针存放着一个地址,这一点和其他指针类似。不同的是,我们对它到底储存的是什么对象的地址并不了解。 代码语言:javascript 复制 double a=2.3;int b=5;void*p=&a;cout<<p<<endl;//输出了a的地址p=&b;cout<<p<<endl;//输...