C 带“的函数;int x[][n]";作为论据

C 带“的函数;int x[][n]";作为论据,c,arrays,pointers,C,Arrays,Pointers,以这种方式定义函数时: void someFunction(int x[][n]){ //Function instruction } x objet到底是什么: 它是一个指向未定义整数数组的n个指针数组吗 使用指针语法的同义定义是什么 程序如何在内存中分配x对象。它是指向未指定大小的内存块的指针,该内存块可被myn整除 它的索引形式为x[i][j]=*((int*)x+i*n+j) 同义词。不太为人所知的是: void someFunction(int (*x)[n]){ //F

以这种方式定义函数时:

void someFunction(int x[][n]){
   //Function instruction
}
x objet到底是什么:

它是一个指向未定义整数数组的n个指针数组吗

使用指针语法的同义定义是什么


程序如何在内存中分配x对象。

它是指向未指定大小的内存块的指针,该内存块可被my
n
整除

它的索引形式为
x[i][j]=*((int*)x+i*n+j)

同义词。不太为人所知的是:

void someFunction(int (*x)[n]){
   //Function instruction
}

它与指向内存块的指针数组不同,当您将函数定义为

void someFunction(int x[][n]) { ... }
复印机将其解释为

void someFunction(int (*x)[n]) { ... }  
它是一个指向未定义整数数组的n个指针数组吗

否。
x
是指向
n
整数数组的指针

使用指针语法的同义定义是什么


你是说一个块,一个多维数组吗?@rullof,是的。虽然我说过block是精确的,并且避免与指向数组
T**
的指针数组混淆。x对象总是指向第一个元素,括号只是语义上的。它可以是多维的,也可以不是多维的,因为
inta
inta[1]
相同,
intb[n]
intb[1][n]
相同。我说得对吗?这是错误的
x[i][j]
不是
*(x+i*n+j)
。它甚至不是正确的类型。@StoryTeller:“x指向第一个数组,它是int[n]类型,而不是第一个元素。”第一个数组是第一个元素——二维数组的第一个元素。如果您这样定义它有什么区别:
void someFunction(int x[]){…}
void someFunction(int x[n]){…}
@rullof:如果你问
void-someFunction(int x[])
void-someFunction(int x[n])
之间有什么区别,那就没有区别了。如果你问它们和
void-someFunction(int x[[n])之间有什么区别
,那么,前者,
x
是指向
int
的指针,但在后者,
x
是指向n
int
@EricPostpischil数组的指针;我认为唯一的区别是,如果
n
没有全局定义,第二个
someFunction(int x[n])
将给出编译时错误。
void someFunction(int (*x)[n]) { ... }