网站首页 > 技术教程 正文
我们现在使用的绝大多数计算机都是冯诺依曼机,其核心就是“存储程序控制”,数据和代码都需要先加载到可寻址的内存。在C语言中,数据和代码分别通过变量名和函数名来寻址。我们知道,指针是一个特殊的地址,特殊在于其需要有类型信息,由此,指针变量可以区分为数据指针变量和函数指针变量。还有一种特殊的指针变量,称为void*指针变量,其类型可以待定,在显式地转换为其它特定类型之前,只是一个单纯的内存地址,所以void*指针变量也称为泛型指针变量,。
#include <stdio.h>
#include <malloc.h>
void * memset(void *dst, int val, size_t count)
{
//assert(dst); // 这里需要检验dst的有效性
char* ret = (char*)dst; // 内存按字节编址,char与1个字节长度一致
while (count--)
{
*ret++ = (char)val;
}
return dst;
}
int* add(int* a,int* b)
{
*a += *b;
return a;
}
void* voidPointer(void *vp,int n)
{
int a = 33;
int ar[5];
memset(ar,0,sizeof(ar));
int arr[] = {1,2,3,4,5};
vp = &a; // void指针做左值,右值不需要做类型转换
printf("%d\n",vp==&a); // 1
int *q = (int*)vp; // void指针做右值,需要做类型转换
printf("%d %d\n",*(int*)vp,*q); // 33 33
vp = arr;
printf("%d %d\n",*(arr+2),*((int*)vp+2)); // 3 3
int*(*fp)(int*,int*) = add;
printf("%d\n",*fp(&a,arr+2)); // 7
vp = (int*(*)(int*,int*))*(void**)&add;
//printf("%d\n",*vp(&a,arr+2));
void* (*vfp)(void*,void*) = (void* (*)(void*,void*))add;//36
printf("%d\n",*((int*(*)(int*,int*))vfp)(&a,arr+2)); //39
int *var = (int*)malloc(sizeof(int)*n);
return var;
}
int main()
{
void *vp = NULL;
vp = voidPointer(vp,5);
int *p = (int*)(vp);
*p = 1;
getchar();
return 0;
}
-End-
猜你喜欢
- 2024-10-04 C++核心准则编译边学-F.43 永远不要返回局部对象的指针或引用
- 2024-10-04 C++|虚函数多态机制的虚函数表及其指针的内存布局及手动引用
- 2024-10-04 第5课,引用方式(锁定) 锁定引用值
- 2024-10-04 C++函数参数采用变量、引用和指针的区别
- 2024-10-04 Java String 手工引用指针 java中指针和引用
- 2024-10-04 C++核心准则C.145:通过指针或引用访问多态对象
- 2024-10-04 C\C++语言11|引用做为函数参数与返回值及与指针的区别
- 2024-10-04 Excel中的引用方式,看过之后你就懂
- 2024-10-04 C++,常量及sizeof函数,传值调用、指针调用和引用调用的区别
- 2024-10-04 C++ 继承中指针和引用类型特点 c++指针的引用传参数形式
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)