c语言一维数组给指针赋值的例子(指针分类与void指针的赋值)
我们现在使用的绝大多数计算机都是冯诺依曼机,其核心就是“存储程序控制”,数据和代码都需要先加载到可寻址的内存在C语言中,数据和代码分别通过变量名和函数名来寻址我们知道,指针是一个特殊的地址,特殊在于其需要有类型信息,由此,指针变量可以区分为数据指针变量和函数指针变量还有一种特殊的指针变量,称为void*指针变量,其类型可以待定,在显式地转换为其它特定类型之前,只是一个单纯的内存地址,所以void*指针变量也称为泛型指针变量,,接下来我们就来聊聊关于c语言一维数组给指针赋值的例子?以下内容大家不妨参考一二希望能帮到您!
c语言一维数组给指针赋值的例子
我们现在使用的绝大多数计算机都是冯诺依曼机,其核心就是“存储程序控制”,数据和代码都需要先加载到可寻址的内存。在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-
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com