首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的大小在主函数和用户定义函数中是不同的。

数组的大小在主函数和用户定义函数中是不同的。
EN

Stack Overflow用户
提问于 2021-01-10 15:50:40
回答 2查看 163关注 0票数 0

我试图使用C语言中的sizeof of ()函数来计算数组的长度。下面是我的代码。

代码语言:javascript
复制
#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语言很陌生,对此我感到很困惑。有谁能给我解释一下为什么会有相同的原因,同时也可以给出计算函数中数组长度的代码。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-10 15:54:27

这是因为,在C语言中,函数声明

代码语言:javascript
复制
void printArraySize(int array[])

等于

代码语言:javascript
复制
void printArraySize(int *array)

因此,在编译为32位的程序上,行int size = sizeof(array) / sizeof(array[0]);的值总是为1。

数组不能作为数组传递给函数,而是作为指针传递给函数。实际上,如果您试图在array函数中修改printArraySize,那么您也将在调用函数main中修改它。

这就是为什么C(和许多其他编程语言)中的字符串以0结尾的原因。

票数 4
EN

Stack Overflow用户

发布于 2021-01-10 15:55:30

这位

代码语言:javascript
复制
 void printArraySize(int array[]) {

可以写成

代码语言:javascript
复制
 void printArraySize(int* array) {

所以在这两种情况下,它们都是指针,

所以,

代码语言:javascript
复制
sizeof(array)

在函数printArraySize中,将返回指针的大小,而不是预期的数组。

您不应该在编译器之外排列它的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65655174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档