我无法找到从函数中获取数组大小的方法。这是我的代码:
#include <stdio.h>
void printBuff(char *buf);
int main()
{
char arr[12] = "csdlnclskjn";
printf("Array size: %d, element size: %d. ",sizeof(arr), sizeof(arr[0]));
printBuff(arr);
return 0;
}
void printBuff(char *buf){
printf("Array size: %d, element size: %d.",sizeof(buf), sizeof(buf[0]));
}
如上所示,printBuff与main函数中的第二行相同。但是,输出是不同的:
数组大小:12,元素大小:1。数组大小:4,元素大小:1。
考虑一下,我理解为什么printBuff()方法中的输出为4。实际上,arr是指向数组第一个元素的指针。在32位体系结构上,sizeof(arr)将返回4,在64位上它将返回8.我不明白为什么sizeof(arr)返回数组的大小而不是字节数在main()函数中使用时的指针。毕竟,arr,当在main()中调用时,仍然是一个指针,对吗?
所以我的问题是:
为什么sizeoff()的解释会有所不同,具体取决于使用它的上下文?这取决于什么?
如何从函数中获取实际的数组大小(数组中的元素数),而不将大小作为参数传递,而不使用迭代数组的方法,同时递增计数器直到'\ 0达到了 - 无论上下文如何,这都是获取数组大小的最简单方法。
顺便提一下,负责记住数组大小的编译器/系统在哪里存储数组的大小?它是如何与数组相关联的?如何检索它?
我想使用sizeof(buf),/ sizeof(buf [0])作为数组的大小迭代一个数组,但显然这是不可能的。
答案 0 :(得分:1)
所以这是我对你的问题的答案:
char*
类型。strlen
函数。否则,您必须将长度作为参数传递。传递数组参数时,不要使用sizeof(buf)/sizeof(buf[0])
来获取数组的长度。见this。了解更多信息。