我很迷惑如何使用memcpy讀取數組中複製的指針。 以下是我所嘗試過的,但不起作用。memcpy和指針
基本上,我已經分配了一塊內存,其中我拷貝類似於數組時尚的指針,但在重試期間它不起作用。雖然這適用於基本數據類型
我想在element
塊中存儲任何東西,它可以是integers
或pointers
。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INDEX(x) ((char *)elements + (sizeof(int*) * (x)))
int size = 10;
void f2_int_ptr() {
int i = 0;
void *elements = (void*)malloc(size * sizeof(int*));
for (i = 0; i < size; i++) {
int *v = (int *) malloc (sizeof(int));
memcpy (v, &i, sizeof (int));
memcpy (INDEX(i) , v, sizeof (int*));
}
for (i = 0; i < size; i++) {
int *v = (int*)0;
memcpy (v, INDEX(i), sizeof(int *));
printf ("%d\n", *v);
}
}
void f1_int() {
int i = 0;
void *elements = (void*)malloc(size * sizeof(int));
for (i = 0; i < size; i++) {
memcpy (INDEX(i) , &i, sizeof (int));
}
for (i = 0; i < size; i++) {
int v;
memcpy (&v, INDEX(i), sizeof (int));
printf ("%d\n", v);
}
}
int main(){
f1_int();
f2_int_ptr();
return 0;
}
在上面的代碼f1_int
工作正常,但f2_int_ptr
不起作用。
注意:所有對'void *'(和宏)進行的類型轉換並不會讓你的代碼變得非常討厭。你有什麼理由在任何地方使用'void *'嗎? – 2011-04-01 10:43:28
這適用於所有基本類型,但不適用於指針。 – Avinash 2011-04-01 10:44:47
如果你打算閱讀,你應該嘗試澄清你的代碼。 C是一個騙局(http://www.gnu.org/fun/jokes/unix-hoax.html)不是這樣的代碼的參數。 – mouviciel 2011-04-01 10:52:52