将C数组作为char*函数参数传递

sip*_*wiz 7 c arrays

我有一些代码我正在使用以下变量声明:

char tmpry[40];
Run Code Online (Sandbox Code Playgroud)

它正在使用此功能:

char *SomeFunction(char *tmpryP) {
   // Do stuff.
}
Run Code Online (Sandbox Code Playgroud)

函数调用是:

SomeFunction(&tmpry[0]);
Run Code Online (Sandbox Code Playgroud)

我非常确定这与以下相同:

SomeFunction(tmpry);
Run Code Online (Sandbox Code Playgroud)

我甚至检查过SomeFunction中的char*指针最终指向与两种情况下的数组相同的内存位置.

我的问题是检查这两个函数调用是否相同(因此原始程序员只是讨厌)的健全性检查?

ojb*_*ass 12

这两个是等价的,我认为SomeFunction(tmpry); 更具可读性.


Wil*_*hin 12

它们完全一样.

someArray[i]
Run Code Online (Sandbox Code Playgroud)

完全是指

*(someArray + i)
Run Code Online (Sandbox Code Playgroud)

其中someArray在第二种情况下是指向内存位置的指针.同样的,

&someArray[i]
Run Code Online (Sandbox Code Playgroud)

完全是指

(someArray + i)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,术语都是指向内存位置的指针.


Ale*_*x B 7

可能是重要的,如果SomeFunction是一个宏并且"sizeof"取其一个参数,因为它sizeof(tmpry)可能不一定等于sizeof(&tmpry[0]).

否则,正如其他人指出的那样,它们完全相同.


mct*_*ylr 5

关于数组和指针C编程FAQ部分解决了这个问题(以及许多其他常见的C问题和混淆.