2

次のようにキャストしても安全かどうか疑問に思っています。

char **cpp;
// ... allocation and what not 
void *vp = (void *)cpp;
// ...
cpp = (char **)vp;

void ** を使用する必要がありますか、それとも void * で問題ありませんか? これは私のボックスのいくつかで問題なく動作しますが、特定のシステムで問題が発生する可能性があるかどうか疑問に思っていました.

4

2 に答える 2

6

キャストは常に安全であり、ポインターが有効である限り逆参照は安全です。a を使用する唯一のケースは、void **それを逆参照して を取得する予定の場合ですvoid *

ただし、ポインター演算を行わない限り、実際には問題になりません。http://codepad.org/UcZUA0ULでわかるように、void*またはを使用しても問題なく動作しますvoid **。ポインターを実際に使用する前に、char **とにかくキャストして戻します。そのため、void-ish である間は逆参照されません。

于 2012-05-11T16:39:24.777 に答える
3

void*元のポインターが だった場合、からのキャスト (およびその後の使用法) char **

を使用しないでくださいvoid**

于 2012-05-11T16:39:50.327 に答える