C++ 在函数-C中使用数组 #包括 #包括 使用名称空间std; 整数写入(整数arr[] { int n=(sizeof(arr)/sizeof(arr[0]); 对于(int r=0;r>strvar; }
屏幕上打印的只是数字“1”。没有更多。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
刚刚开始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]))
在functionmain
中,并在调用functionwrite
时传递它。没想到我的错误会出现在特定的代码行中。一旦将数组传递给function,它就会变成指针类型,因此sizeof(arr)会给出指针的大小,而不是数组!这需要一些时间来适应,我现在已经习惯使用python了,它没有指针。你想做什么?你期望得到什么结果?计算int n=(sizeof(arr)/sizeof(arr[0]))
在functionmain
中,并在调用functionwrite
时传递它。没想到我的错误会出现在特定的代码行中。一旦将数组传递给function,它就会变成指针类型,因此sizeof(arr)会给出指针的大小,而不是数组的大小!这需要一些时间来适应,我现在已经习惯使用python了,它没有指针。