如何在函数内获取数组大小?
How to get array size within function?
我找不到从函数中获取数组大小的方法。这是我的代码:
#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 与主函数中的第二行相同。但是,输出不同:
Array size: 12, element size: 1. Array size: 4, element size: 1.
想了想,明白为什么printBuff()方法中输出的是4了。实际上,arr 是指向数组第一个元素的指针。在 32 位架构上,sizeof(arr) 将 return 4,在 64 位架构上它将 return 8。我不明白的是为什么 sizeof(arr) return s 在 main() 函数中使用时,数组的大小而不是指针的字节数。毕竟,当在 main() 内部调用时,arr 仍然是一个指针,对吧?
所以我的问题是:
为什么 sizeoff() 会根据使用的上下文有不同的解释?这取决于什么?
如何从函数中获取实际数组大小(数组中元素的数量),而不将大小作为参数传递,而不使用诸如在递增计数器时遍历数组等方法until '\0' is reached - 这是获取数组大小的最简单方法,无论上下文如何。
顺带一提,负责记忆数组大小的compiler/system存放数组大小的地方呢?它如何与数组相关联以及如何检索?
我想使用 sizeof(buf), / sizeof(buf[0]) 作为数组的大小来遍历数组,但显然这是不可能的。
下面是我对您问题的回答:
- 数组在传入函数(使用char*参数)时"converted"变成
char*
类型。
- 据我所知,没有这样的方法。您可以对字符串使用
strlen
函数。否则,您必须将长度作为参数传递。
- 见How does an array pointer store its size?
传递数组参数时不要使用sizeof(buf)/sizeof(buf[0])
获取数组的长度。参见 this。获取更多信息。
我找不到从函数中获取数组大小的方法。这是我的代码:
#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 与主函数中的第二行相同。但是,输出不同:
Array size: 12, element size: 1. Array size: 4, element size: 1.
想了想,明白为什么printBuff()方法中输出的是4了。实际上,arr 是指向数组第一个元素的指针。在 32 位架构上,sizeof(arr) 将 return 4,在 64 位架构上它将 return 8。我不明白的是为什么 sizeof(arr) return s 在 main() 函数中使用时,数组的大小而不是指针的字节数。毕竟,当在 main() 内部调用时,arr 仍然是一个指针,对吧?
所以我的问题是:
为什么 sizeoff() 会根据使用的上下文有不同的解释?这取决于什么?
如何从函数中获取实际数组大小(数组中元素的数量),而不将大小作为参数传递,而不使用诸如在递增计数器时遍历数组等方法until '\0' is reached - 这是获取数组大小的最简单方法,无论上下文如何。
顺带一提,负责记忆数组大小的compiler/system存放数组大小的地方呢?它如何与数组相关联以及如何检索?
我想使用 sizeof(buf), / sizeof(buf[0]) 作为数组的大小来遍历数组,但显然这是不可能的。
下面是我对您问题的回答:
- 数组在传入函数(使用char*参数)时"converted"变成
char*
类型。 - 据我所知,没有这样的方法。您可以对字符串使用
strlen
函数。否则,您必须将长度作为参数传递。 - 见How does an array pointer store its size?
传递数组参数时不要使用sizeof(buf)/sizeof(buf[0])
获取数组的长度。参见 this。获取更多信息。