[英]C array of void pointers holding different value types
我試圖有一個帶有 3 個指針的 void 數組:
char v1='c';
int v2 =12;
int const numOfArgs=3;
char v3[3] = "geo";
void *arg1 = &v1;
void *arg2 = &v2;
void *arg3 = &v3;
void *ptrs[numOfArgs]= {arg1,arg2,arg3};
我嘗試了幾種方法來使用來自ptrs
的指針之一,包括強制轉換,但沒有任何效果。
我應該如何處理它?
首先
char v3[3] = "geo";
append '\0'
沒有足夠的空間(C 字符串以空值結尾)。
所以改成
char v3[4] = "geo";
為了從void *ptrs[numOfArgs]
獲取值,類型轉換將起作用。 並且不要忘記在需要時取消引用。
這是一個例子:
printf("\n%c", *(char*)ptrs[0]);
printf("\n%d", *(int*)ptrs[1]);
printf("\n%s", (char**)ptrs[2]);
Output:
c
12
geo
void *ptrs[numOfArgs]= {arg1,arg2,arg3};
當你編譯你的代碼時,你會得到錯誤:
可變大小的 object 可能未初始化
如果要以這種方式聲明數組,則必須通過#define
使常量變量numOfArgs
:
#define numOfArgs 3
或者您可以將指針數組的每個元素初始化為:
void *ptrs[numOfArgs];
ptrs[0] = &v1;
ptrs[1] = &v2;
ptrs[2] = &v3;
這條線的問題:
void *ptrs[numOfArgs]= {arg1,arg2,arg3};
那ptrs
是變長數組嗎。 這樣的 arrays 不允許被初始化,因為它在運行時確定的大小。 將numOfArgs
聲明為const
並不重要。
只有當數組的大小是編譯時常量或更正式的常量表達式時,才能初始化數組。 如果大小是宏,則可以滿足此要求。
#define numOfArgs 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.