簡體   English   中英

C 包含不同值類型的 void 指針數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM