我有这个代码:
int indexOf(const char *array[], char *e)
{
printf("inside: %d\n",(int)sizeof(array));
/* ... */
}
int main(int argc, char *argv[])
{
const char *a[] = {";", ",", ":", "==", ":="};
char *b = "==";
printf("outside: %d\n",(int)sizeof(a));
int d = indexOf(a,b);
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
outside: 40
inside: 8
Run Code Online (Sandbox Code Playgroud)
为什么输出不一样?有什么帮助吗?
传递给函数时,数组衰减成指向它的第一个元素.在sizeof从功能产生具体的实现指针的大小.你可以声明它:
int indexOf(const char **array, char *e)
Run Code Online (Sandbox Code Playgroud)
您可能希望将长度作为单独的参数传递.
我正在尝试避免将大小作为参数传递.
在这种情况下,您可以使用a标记数组的结尾 NULL
const char *a[] = {";", ",", ":", "==", ":=", NULL};
Run Code Online (Sandbox Code Playgroud)
在函数中,您将知道它的结束位置.
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |