如果未从主函数传递单词数组的大小,则此程序仅显示一个输出“Hiii”。
如果在disp
函数内生成大小,则显示
尺寸:48
尺寸:2
Hiii
如果从main
函数显示大小,则显示
尺寸:48
尺寸:48
HIII
你好
你好有
Hello World
#include<stdio.h>
#include<conio.h>
void disp(char words[][12],int size)
{
int i,j;
char *p,*cp;
p=words;
size=sizeof(words);
printf("Size %d\n",size);
for(cp=p;cp<(p+size);cp+=12)
{
printf("%s",cp);
printf("\n");
}
}
void main()
{
char words[][12]={"Hiii","Hello","Hello There","Hello World"};
int size;
clrscr();
size=sizeof(words);
printf("Size %d\n",size);
disp(words,size);
getch();
}
答案 0 :(得分:2)
在C中,传递数组的语法实际上只是说你传递指针的另一种方式。例如:
void f(int a[])
只是另一种说法
void f(int *a)
这是该语言中的一种特殊语法,它旨在使参数更加自我记录,但在您所描述的情况下也会令人困惑。
在您的情况下,声明:
void disp(char words[][12],int size)
实际上在说
void disp(char (*words)[12],int size)
也就是说,单词是指向12个字符数组的指针。在你的情况下,指针的大小是两个字节。
答案 1 :(得分:1)
sizeof
中的main()
给出了数组的大小
函数sizeof
中的disp()
给出了指针的大小。
这是因为当您尝试将数组传递给函数时,它会衰减到指向其第一个元素的指针 获取函数内部数组大小的唯一方法是将其作为单独的函数参数传递,这是最常用的方法。
答案 2 :(得分:1)
您需要更好地理解数组和指针之间的区别。另外,sizeof是在编译时计算的,因此main中的单词大小可以得到实际大小(你的单词数组是一个双向字符数组,而不是传统的char指针数组,因此每行的大小为12,总共48个)。在disp内部,无法知道数组的结束位置,因此无法确定其大小。阅读k&amp; r以便更好地理解