我试图使用C语言中的sizeof of ()函数来计算数组的长度。下面是我的代码。
码
#include <stdio.h>
void printArraySize(int array[]);
int main() {
int array[] = {1, 2, 3, 4, 5, 6};
int size = sizeof(array) / sizeof(array[0]);
printf("Size of array - %d\n", size);
printArraySize(array);
return 0;
}
void printArraySize(int array[]) {
int size = sizeof(array) / sizeof(array[0]);
printf("Size of array - %d\n", size);
}当我计算主函数中数组的长度时,输出是正确的。但是,当我试图在接受整数数组的函数printArraySize()中执行相同的操作时,输出总是1。
我对C语言很陌生,对此我感到很困惑。有谁能给我解释一下为什么会有相同的原因,同时也可以给出计算函数中数组长度的代码。
谢谢
发布于 2021-01-10 15:54:27
这是因为,在C语言中,函数声明
void printArraySize(int array[])等于
void printArraySize(int *array)因此,在编译为32位的程序上,行int size = sizeof(array) / sizeof(array[0]);的值总是为1。
数组不能作为数组传递给函数,而是作为指针传递给函数。实际上,如果您试图在array函数中修改printArraySize,那么您也将在调用函数main中修改它。
这就是为什么C(和许多其他编程语言)中的字符串以0结尾的原因。
发布于 2021-01-10 15:55:30
这位
void printArraySize(int array[]) {可以写成
void printArraySize(int* array) {所以在这两种情况下,它们都是指针,
所以,
sizeof(array)在函数printArraySize中,将返回指针的大小,而不是预期的数组。
您不应该在编译器之外排列它的大小。
https://stackoverflow.com/questions/65655174
复制相似问题