请参阅下面的代码并建议我使用" sizeof "关键字时有什么不同:
#include<stdio.h>
#include<conio.h>
void show(int ar[]);
void main()
{
int arr[]={1,2,3,4,5};
clrscr();
printf("Length: %d\n",sizeof(arr));
printf("Length: %d\n",sizeof(arr)/sizeof(int));
show(arr);
getch();
}
void show(int ar[])
{
printf("Length: %d", sizeof(ar));
printf("Length: %d", sizeof(ar)/sizeof(int));
}
Run Code Online (Sandbox Code Playgroud)
但输出是这样的:
输出是:
长度:10
长度:5
长度:2
长度:1
为什么我会这样; 如果我想将整个数据从一个数组转移到另一个数组,我该怎么办?
建议我如果有人知道.
unw*_*ind 63
数组在函数调用中衰减为指针.无法计算仅以任何方式表示为指针的数组的大小,包括使用sizeof.
您必须添加一个显式参数:
void show(int *data, size_t count);
Run Code Online (Sandbox Code Playgroud)
在调用中,您可以使用sizeof计算实际数组的元素数量:
int arr[] = { 1,2,3,4,5 };
show(arr, sizeof arr / sizeof *arr);
Run Code Online (Sandbox Code Playgroud)
请注意,sizeof为您提供以单位为单位的大小char,这就是为什么需要除以基本sizeof (int)需求,或者您获得的价值太高的原因.
另外请注意,兴趣和清洁度点,这sizeof是不是 一个功能.仅当参数是类型名称时才需要括号,因为参数则是类似强制转换的表达式(例如sizeof (int)).通过sizeof对数据进行操作,您通常可以在不命名实际类型的情况下离开.
| 归档时间: |
|
| 查看次数: |
216103 次 |
| 最近记录: |