如何在C中打印并用整数填充void*数组

如何在C中打印并用整数填充void*数组,c,arrays,C,Arrays,我正试图弄清楚如何使用void*数组,以便用任何数据类型填充它们。例如,我想用整数值填充一个数组,然后打印该数组的值。为了做到这一点,我一直在尝试下面的方法,但我很确定我的想法是完全错误的。我应该如何正确地执行此操作 用整数填充数组 #定义数组长度10 无效*arr1; for(int i=0;i

我正试图弄清楚如何使用
void*
数组,以便用任何数据类型填充它们。例如,我想用整数值填充一个数组,然后打印该数组的值。为了做到这一点,我一直在尝试下面的方法,但我很确定我的想法是完全错误的。我应该如何正确地执行此操作

用整数填充数组
#定义数组长度10
无效*arr1;
for(int i=0;i
打印阵列
for(int i=0;i
用整数填充数组:

#define ARRAY_LENGTH 10

/* expect arr1 to look at an already allocated memory chunk of type (void*) */

int *int_array = (int*)arr1;
for (int i = 0; i < ARRAY_LENGTH; i++) {
    int_array[i] = i;
}
#定义数组长度10
/*期望arr1查看类型为(void*)的已分配内存块*/
int*int_数组=(int*)arr1;
for(int i=0;i
打印阵列

for (int i=0; i < ARRAY_LENGTH; i++) {
 printf("new value %d\n", int_array[i]);
}
for(int i=0;i

由于
void*
上的指针算术是非法的,您必须将其强制转换为其他指针类型。在开始使用前铸造一次是最简单的方法;在本例中,指向整数指针。

1st void*arr1不是数组-它只是指向任何内容的指针

第二个-你可以开始工作,从一些多字节对象获取地址,将其转换为(void*)类型,这样你就可以得到void*arr1,其中包含一些值


3nd对于arr1[i]或(arr1+i),必须将指针arr1转换为某种类型(int)(float*)等(struct ustract*)

如果在尝试访问数组之前没有
malloc
内存,那么指针可能会损坏内存中的随机地址

所以首先要做的是:

#define ARRAY_LENGTH 10 // 10 Bytes

int main()
{
   char *char_arr;

   // Initial memory allocation
   char_arr = (char *) malloc(ARRAY_LENGTH);

   // [Do stuff]

   free(char_arr); // Don't forget to free!!!!

   return(0);
}
然后,如果要使用另一种类型访问阵列,则不能中断。 正如@atturri所说,指针算法对于无效指针是非法的

因此,您必须使用一个新指针来访问使用其他类型的数组。您必须注意新数组的上限:

int *int_array = (int*) char_arr;
int elementsCount = sizeof(*int_array) / sizeof(*char_arr);
for (int i = 0; i < elementsCount ; i++)
{
    int_array[i] = i;
}
int*int\u数组=(int*)字符数组;
int elementscont=sizeof(*int_数组)/sizeof(*char_arr);
for(int i=0;i
最后:
#定义数组长度10//10字节
int main()
{
char*char_arr;
int*int_数组=(int*)字符数组;
int elementscont=sizeof(*int_数组)/sizeof(*char_arr);
int i;
//初始内存分配
char_arr=(char*)malloc(数组长度);
//做事
对于(i=0;i
如果你想避免严重的内存问题,我认为你应该
malloc
一个内存块。试着用很多细节来回答。希望这有帮助!
#define ARRAY_LENGTH 10 // 10 Bytes

int main()
{
   char *char_arr;

   // Initial memory allocation
   char_arr = (char *) malloc(ARRAY_LENGTH);

   // [Do stuff]

   free(char_arr); // Don't forget to free!!!!

   return(0);
}
int *int_array = (int*) char_arr;
int elementsCount = sizeof(*int_array) / sizeof(*char_arr);
for (int i = 0; i < elementsCount ; i++)
{
    int_array[i] = i;
}
#define ARRAY_LENGTH 10 // 10 Bytes

int main()
{
   char *char_arr;
   int *int_array = (int*) char_arr;
   int elementsCount = sizeof(*int_array) / sizeof(*char_arr);
   int i;

   // Initial memory allocation
   char_arr = (char *) malloc(ARRAY_LENGTH);

    // Do stuff   
    for (i = 0; i < elementsCount ; i++)
    {
        int_array[i] = i*2;
        printf("int_array[%d]=%d", i, int_array[i]);
    }

   free(char_arr);
   /* Don't forget to free!! (Even if it's not "dangerous"
    * in this example in the main since we are about to quit */

   return(0);
}