void类型的指针也可以转换为任意类型的指针,需要强制类型转换(实际上不需要,但是强制类型转换会增加代码的可读性,比如使用malloc函数的时候) void类型的指针不可以直接解引用(dereference),强制类型转换之后才可以正常访问void指针指向的内存单元 intmain(){ inta =10; // 指针p指向变量a, 但是p的类型仍然是void void...
为了使用void指针,可以采用以下步骤: 声明一个void指针变量: void *ptr; 复制代码 分配内存并将其地址赋给void指针: int num = 10; ptr = # 复制代码 使用void指针时,需要将其转换为实际类型的指针。这称为类型强制转换: int *intPtr = (int *)ptr; 复制代码 现在,可以使用转换后的指针进行操作...
6 7 8 9 10 11 12 13 14 #include <stdio.h> intmain(void){ void*p; inta = 14322; charc ='A'; p = &a; //p = &c; //强制类型转换(int*)p 把变量指针p强制转换成指向int类型的指针 printf("a=%d\n",*(int*)p); p = &c; printf("c=%c\n",*(int*)p); return0; }...
打印char类型的地址,可以用void*进行强制转换(打印char类型指针的所指数据的地址/char类型指针保存的地址); #include<iostream>usingnamespacestd;intmain(){charch='a';char*ptr_ch=&ch;cout<<"ptr_ch:"<<ptr_ch<<'\n';cout<<"(void*)ptr_ch:"<<(void*)ptr_ch<<'\n';cout<<"*ptr_ch:"<<*p...
需要注意的是,void 类型指针可以接受其他数据类型指针的赋值,但如果需要将 void 指针的值赋给其他类型的指针,则还是需要进行强制类型转换。例如,下面语句也是合法的: int *p1,p3; void *p2; p2=p1; p3=(int *)p2; 上述语句将 void 类型的指针 p2 赋值给 int 指针 p3 时就用了强制类型转换,如果不加 “...
为什么要加一坨 (void* (*)(void*)) 作函数指针的强制类型转换? 去年提问的时候还可以正常用的代码, 今年莫名其妙地不合规了。 难道“龟腚” 这么无聊? https://stackoverflow.com/questions/30095846/meaning-of-void-void/30096000 答案永远存在网上的某个角落。
而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换: 代码语言:javascript 复制 void*p1;int*p2;p1=p2; 但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”而“有类型”则不能包容“无类型”。道理很简单,我们可以说“男人和女人都是...
事实上,我们完全可以将 p 转换为 void * 指针: void *p = init();handle(p);这样一来,只有 init() 库的开发者才能访问 p 指向的内容,避免外界调用者“意外”或者“恶意”的修改,整个C语言程序就会稳定和安全很多了。 另外,void 指针在一些教科书里被称作“万能指针”,这主要是因为任意指针都可以使用 void...
指针就是这样形成的。 下面用代码说明 #include <stdio.h>intmain(void){char ch ='a';intnum =97;printf("ch 的地址:%p",&ch);//ch的地址:0028FF47printf("num的地址:%p",&num);//num的地址:0028FF40return0;} 指针的值实质是内存单元(即字节)的编号,所以指针单独从数值上看,也是整数,他们一般...