这是用C计算数组长度的众所周知的代码:
sizeof(array)/sizeof(type)
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找出作为函数参数传递的数组的长度:
#include <stdio.h>
int length(const char* array[]) {
return sizeof(array)/sizeof(char*);
}
int main() {
const char* friends[] = { "John", "Jack", "Jim" };
printf("%d %d", sizeof(friends)/sizeof(char*), length(friends)); // 3 1
}
Run Code Online (Sandbox Code Playgroud)
我假设数组通过值复制到函数参数作为常量指针,并且对它的引用应解决此问题,但此声明无效:
int length(const char**& array);
Run Code Online (Sandbox Code Playgroud)
我发现将数组长度作为第二个参数传递为冗余信息,但为什么标准声明main如下:
int main(int argc, char** argv);
Run Code Online (Sandbox Code Playgroud)
请解释是否可以在函数参数中找出数组长度,如果是,那么为什么存在冗余main.
当我调用此函数时:
int within(struct key *node, int *value) {
int length = len(node);
if ((value <= node[length-1].data) && (value >= node[0].data)) // Problematic line
return 0;
else if (value > node[length-1].data)
return 1;
else if (value < node[0].data)
return -1;
}
Run Code Online (Sandbox Code Playgroud)
Valgrind引发了此错误消息:
地址0x51f60a0未堆叠,malloc'd或(最近)free'd
value和node变量具有正确的值.使用所有变量.那里的内存管理有什么问题?请告诉我,如果片段不清楚情况.