Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在函数-C中使用数组 #包括 #包括 使用名称空间std; 整数写入(整数arr[] { int n=(sizeof(arr)/sizeof(arr[0]); 对于(int r=0;r>strvar; }_C++_Arrays_Function - Fatal编程技术网

C++ 在函数-C中使用数组 #包括 #包括 使用名称空间std; 整数写入(整数arr[] { int n=(sizeof(arr)/sizeof(arr[0]); 对于(int r=0;r>strvar; }

C++ 在函数-C中使用数组 #包括 #包括 使用名称空间std; 整数写入(整数arr[] { int n=(sizeof(arr)/sizeof(arr[0]); 对于(int r=0;r>strvar; },c++,arrays,function,C++,Arrays,Function,屏幕上打印的只是数字“1”。没有更多。 刚刚开始C,我只是想了解语法的诀窍。问题是下面这行 #include <stdio.h> #include <iostream> using namespace std; int write(int arr[]) { int n = (sizeof(arr)/sizeof(arr[0])); for(int r=0;r<n;r++) { printf("%d\n", arr[r

屏幕上打印的只是数字“1”。没有更多。
刚刚开始C,我只是想了解语法的诀窍。

问题是下面这行

#include <stdio.h>
#include <iostream>

using namespace std;


int write(int arr[])
{

    int n = (sizeof(arr)/sizeof(arr[0]));

    for(int r=0;r<n;r++)
    {
        printf("%d\n", arr[r]);
    }

    return 0;
}

int main()
{
    int numlist[] = {1, 3, 5, 6, 7, 9, 0, 2, 3};

    write(numlist);

    std::string strvar;
    std::cin >> strvar;

}
在此上下文中,C不知道
arr
的长度是多少。C中的数组没有固有的长度属性。因此,当您说
sizeof(arr)
时,它转换为
1
,而不是元素数


为了实现这一点,您需要将数组中的元素数与数组一起显式传递给函数

#include <stdio.h>
#include <iostream>

using namespace std;


int write(int arr[])
{

    int n = (sizeof(arr)/sizeof(arr[0]));

    for(int r=0;r<n;r++)
    {
        printf("%d\n", arr[r]);
    }

    return 0;
}

int main()
{
    int numlist[] = {1, 3, 5, 6, 7, 9, 0, 2, 3};

    write(numlist);

    std::string strvar;
    std::cin >> strvar;

}
在这种情况下,C不知道
arr
的长度是什么。C中的数组只是没有固有的长度属性。因此,当您说
sizeof(arr)
时,它会转换为
1
而不是元素的数量

为了实现这一点,您需要将数组中的元素数与数组一起显式传递给函数(sizeof(arr)/sizeof(arr[0]);在这种情况下不起作用,因为
arr
是一个函数参数,此时已衰减为指针。将元素数传递给函数,或使用哨兵值标记数组的结尾。

int n=(sizeof(arr)/sizeof(arr[0]);
在这种情况下不起作用,因为
arr
是一个函数参数,此时已衰减为指针。请将元素数传递给函数,或使用sentinel值标记数组的结尾。

int n = (sizeof(arr)/sizeof(arr[0]));
arr
是一个
int*
sizeof(arr)/sizeof(arr[0])
对您来说是
1
,因为指针的大小与系统上的整数相同

只有当您有权访问数组的定义时,才能计算数组中的元素数。在您的情况下,这仅在
main
中。如果要将数组传递给另一个函数,还需要传递其长度

int write(int arr[])
里面

arr
是一个
int*
sizeof(arr)/sizeof(arr[0])
对您来说是
1
,因为指针的大小与系统上的整数相同

只有当您有权访问数组的定义时,才能计算数组中的元素数。在您的情况下,这仅在
main
中。如果要将数组传递给另一个函数,还需要传递其长度

int write(int arr[])

无法使用计算函数中数组的大小

int write(int* arr)
{
    while (*arr != -1) {
        printf("%d\n", *arr);
        arr++;
    }
    return 0;
}

int main()
{
    int numlist[] = {1, 3, 5, 6, 7, 9, 0, 2, 3, -1}; /* element with value -1
                                                        marks the end of the
                                                        array */
    write(numlist);
}
这是因为函数只将
arr
视为指针(数组衰减为指针),而不是完整数组。因此,
n
将是
1

您必须将大小作为额外参数传递

(sizeof(arr)/sizeof(arr[0]));

无法使用计算函数中数组的大小

int write(int* arr)
{
    while (*arr != -1) {
        printf("%d\n", *arr);
        arr++;
    }
    return 0;
}

int main()
{
    int numlist[] = {1, 3, 5, 6, 7, 9, 0, 2, 3, -1}; /* element with value -1
                                                        marks the end of the
                                                        array */
    write(numlist);
}
这是因为函数只将
arr
视为指针(数组衰减为指针),而不是完整数组。因此,
n
将是
1

您必须将大小作为额外参数传递

(sizeof(arr)/sizeof(arr[0]));

在C/C++中,当arrayname作为参数传递时,它被转换为指针。 在这个函数中,sizeof(arr)等于sizeof(int*)

INTC++

write(numlist, sizeof(arr)/sizeof(arr[0]));
inta[10];
int(&b)[10]=a;//b是长度为10的int数组的引用;
//所以这里可以
模板
大小\u t写入(int(&new\u数组\u名称)[n])
{
//
}

在C/C++中,当arrayname作为参数传递时,它将转换为指针。 在这个函数中,sizeof(arr)等于sizeof(int*)

INTC++

write(numlist, sizeof(arr)/sizeof(arr[0]));
inta[10];
int(&b)[10]=a;//b是长度为10的int数组的引用;
//所以这里可以
模板
大小\u t写入(int(&new\u数组\u名称)[n])
{
//
}

在64位操作系统上,sizeof(arr[0])返回4个字节,而sizeof(arr)返回2个字节。在我的系统上,n的值为2。因此,循环在64位操作系统上执行r,sizeof(arr[0])返回4个字节,而sizeof(arr[0])返回4个字节正在返回2个字节。在我的系统上,n的值为2。由于这个原因,循环正在执行rw。您想做什么?您期望的结果是什么?计算
int n=(sizeof(arr)/sizeof(arr[0]))
在function
main
中,并在调用function
write
时传递它。没想到我的错误会出现在特定的代码行中。一旦将数组传递给function,它就会变成指针类型,因此sizeof(arr)会给出指针的大小,而不是数组!这需要一些时间来适应,我现在已经习惯使用python了,它没有指针。你想做什么?你期望得到什么结果?计算
int n=(sizeof(arr)/sizeof(arr[0]))
在function
main
中,并在调用function
write
时传递它。没想到我的错误会出现在特定的代码行中。一旦将数组传递给function,它就会变成指针类型,因此sizeof(arr)会给出指针的大小,而不是数组的大小!这需要一些时间来适应,我现在已经习惯使用python了,它没有指针。