【问题标题】:Sizeof array through function in C [duplicate]Sizeof数组通过C中的函数[重复]
【发布时间】:2014-09-13 21:12:39
【问题描述】:

我不确定为什么在通过我的函数传递数组时不能使用 sizeof(array) 只输出值 1,而不是 1000000。在将数组传递给函数之前,我打印了 sizeof(array)得到 4000000,当我尝试在函数中打印 sizeof(array) 时,我只得到 4。我可以在函数和 main 中遍历数组以显示所有值,我只是无法在函数中显示 sizeof。我是否错误地传递了数组?

#include <stdio.h>
#include <stdlib.h>

int
searchMe(int numbers[], int target)
{
    printf("%d\n", sizeof(numbers));
    int position = -1;

    int i;
    int k = sizeof(numbers) / sizeof(numbers[0]);   

    for (i = 0; i < k && position == -1; i++)
    {
        if (numbers[i] == target)
        {
            position = i;
        }
    }
    return position;
}

int
main(void)
{
    int numbers[1000000];
    int i;
    int search;
    for (i = 0; i < 1000000; i++) {
        numbers[i] = i;
    }

    printf("Enter a number: ");
    scanf("%d", &search);

    printf("%d\n", sizeof(numbers));
    int position = searchMe(numbers, search);

    printf("Position of %d is at %d\n", search, position);
    return 0;
}

【问题讨论】:

标签: c arrays search sizeof sequential


【解决方案1】:
int searchMe(int numbers[], int target)

等价于

int searchMe(int *numbers, int target)

函数参数有一条特殊的 C 规则,表示数组类型的参数调整为指针类型。

这意味着在您的程序中,sizeof numbers 实际上产生了 int * 指针类型的大小,而不是数组的大小。

要获得大小,您必须在函数中添加第三个参数,并在调用函数时显式传递数组的大小。

【讨论】:

  • 需要注意的是,除非是sizeof或一元&amp;运算符的操作数,否则any数组表达式将由“N元素数组”类型转换T" 到 "指向 T" 的指针。 IOW,numbers 的类型在函数中没有改变,它在函数调用之前改变了。
【解决方案2】:

因为数组作为引用传递。意味着只传递指向数组的指针。函数内部的Sizeof只会打印指针的大小,而不是数组的大小。

除了确保您知道之外,size of 返回字节数,所以如果您有一个整数数组(其中 int 的大小为 4,例如 sizeof 将给出元素 * 4 作为输出。

【讨论】:

  • 这叫做“数组衰减”,顺便说一句
猜你喜欢
  • 2013-07-16
  • 1970-01-01
  • 2011-07-26
  • 2023-04-11
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
相关资源
最近更新 更多