我有一些代码我正在使用以下变量声明:
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*指针最终指向与两种情况下的数组相同的内存位置.
我的问题是检查这两个函数调用是否相同(因此原始程序员只是讨厌)的健全性检查?
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)
在这两种情况下,术语都是指向内存位置的指针.
它可能是重要的,如果SomeFunction是一个宏并且"sizeof"取其一个参数,因为它sizeof(tmpry)可能不一定等于sizeof(&tmpry[0]).
否则,正如其他人指出的那样,它们完全相同.