c - 查找函数内数组的长度

标签 c arrays

下面程序中数组的长度ar在 main 中是正确的,但在 temp 中是正确的它显示了指向 ar 的指针的长度在我的计算机上是 2 (以 sizeof(int) 为单位)。

#include <stdio.h>

void temp(int ar[]) // this could also be declared as `int *ar`
{
    printf("%d\n", (int) sizeof(ar)/sizeof(int));
}

int main(void)
{
    int ar[]={1,2,3};
    printf("%d\n", (int) sizeof(ar)/sizeof(int));
    temp(ar);
    return 0;
}

我想知道应该如何定义该函数,以便在函数中正确读取数组的长度。

最佳答案

没有“内置”方法来确定函数内部的长度。无论您传递arrsizeof(arr)都将始终返回指针大小。因此,最好的方法是将元素数量作为单独的参数传递。或者,您可以使用特殊值,例如 0-1 来指示结束(就像字符串中的 \0 一样,它们只是 char[])。 但当然,“逻辑”数组大小是 sizeof(arr)/sizeof(int) - 1

关于c - 查找函数内数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58358617/

相关文章:

c - 程序fork 4个子进程,每个子进程都会做不同的操作

c - 作为纯字节流的安全结构数组

java - 为什么在Optional.map(byte[]::clone) 上出现编译错误?

c - 多维字符数组从 C 函数返回错误

C语言中的条件(条件部分不起作用)

c++ - 从 C 中正确使用 C++ 函数

android - 使用 Runnable 填充 ListView - 返回太多

.net - 如何在 .net 中查找数组的元素类型

c - 数组未初始化。每个元素都包含垃圾,但不是必需的值

c - 在一个端口上接收 UDP 请求并通过另一个端口发送响应