C指针和数组

C指针和数组,c,arrays,pointers,C,Arrays,Pointers,我想知道c中的这个语句是什么意思 MDMA_Sobel_In_Des.StartAddress = (void *) (&Sobel_In_Buf0[0]); 特别是右边的陈述。void*的作用是什么,为什么程序员不直接将变量&Sobel_In_Buf0[0]的地址分配给StartAddress,为什么在这里使用void*关键字。这是一个变量吗?我对c很陌生,所以如果我听起来很蠢,请原谅我。这取决于穿着明星服装的MDMA类型。在_Des.StartAddress中将void*

我想知道c中的这个语句是什么意思

   MDMA_Sobel_In_Des.StartAddress   = (void *) (&Sobel_In_Buf0[0]);
特别是右边的陈述。void*的作用是什么,为什么程序员不直接将变量&Sobel_In_Buf0[0]的地址分配给StartAddress,为什么在这里使用void*关键字。这是一个变量吗?我对c很陌生,所以如果我听起来很蠢,请原谅我。

这取决于穿着明星服装的MDMA类型。在_Des.StartAddress中将void*指定给MDMA_Sobel_是可以的,但在_Buf0[0]中指定&Sobel_可能不是


如果&Sobel_In_Buf0[0]的类型可以指定给MDMA_Sobel_In_Des.StartAddress,则不需要使用void*。否则,必须执行此操作。

此表达式需要从右到左,从内到外读取:

Sobel_In_Buf0[0]取数组Sobel_In_Buf0的第一个元素。 &Sobel_In_Buf0[0]取数组Sobel_In_Buf0的第一个元素的地址。 void*&Sobel_In_Buf0[0]将数组Sobel_In_的第一个元素的地址强制转换为void*。
这可能是必要的,也可能不是。如果StartAddress中的MDMA_Sobel_是一个空*,则不需要。如果是其他类型的指针、INT\u PTR或其他类型的指针,则可能需要强制转换。

您没有给出相关声明或类型MDMA\u Sobel\u In_Des、StartAddress、Sobel\u In_Buf0?是什么?。出于可读性原因,void*可能是无效的。void*将指针大小写为void类型。如果看不到StartAddressdefinition,就很难说将指针强制转换为类型void意味着什么,意味着指针可以指向任何数据类型。这就是我的观点,我需要知道在这种情况下void是什么类型,因为如果我尝试向您展示代码,它会很长。我正在使用一个库,Balckfin处理器。void*是一个通用指针。任何指针都可以转换为void*,然后可以转换回其原始类型。