c語言一維數組給指針賦值的例子?我們現在使用的絕大多數計算機都是馮諾依曼機,其核心就是“存儲程序控制”,數據和代碼都需要先加載到可尋址的内存在C語言中,數據和代碼分别通過變量名和函數名來尋址我們知道,指針是一個特殊的地址,特殊在于其需要有類型信息,由此,指針變量可以區分為數據指針變量和函數指針變量還有一種特殊的指針變量,稱為void*指針變量,其類型可以待定,在顯式地轉換為其它特定類型之前,隻是一個單純的内存地址,所以void*指針變量也稱為泛型指針變量,,接下來我們就來聊聊關于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-
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!