二维字符数组的sizeof()显示错误o/p
问题描述:
如果字数组的大小没有从主函数传递,该程序只显示一个输出“Hiii”。
如果内部disp
函数产生大小显示
尺寸:48
大小:2
HIII二维字符数组的sizeof()显示错误o/p
如果尺寸是从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();
}
方案在Borland公司的Turbo C
编译
答
在C中,传递数组的语法实际上只是另一种说法,即传递指针。例如:
void f(int a[])
是说
void f(int *a)
它是语言的特殊语法的另一种方式,它是为了使参数更加自我记录,但它也可能会造成混淆在你所描述的情况下。
在你的情况下,声明:
void disp(char words[][12],int size)
实际上是在说
void disp(char (*words)[12],int size)
也就是说,字是一个指向12个字符数组。在你的情况下,指针的大小是两个字节。
答
在main()
的sizeof
给出阵列的大小。 sizeof
函数disp()
给出指针的大小。
这是因为当你尝试传递一个数组到一个函数时,它衰变到一个指向它的第一个元素的指针。
在函数中获取数组大小的唯一方法是将其作为单独的函数参数传递,这是最常用的方法。
答
你需要更好地理解数组和指针的区别。此外,sizeof是在编译时计算的,所以main中的sizeof可以得到实际的大小(你的单词数组是一个二进制的char数组,而不是一个常规的char指针数组,所以每行的大小为12,总数为48)。在disp中,无法知道数组在哪里结束,因此无法确定其大小。阅读k & r更好地理解
btw这不是'作业' – Sourav 2012-03-20 03:33:01
可能的重复[C编程语言中的数组的大小?](http://*.com/questions/1975128/sizeof-an-阵列内式C-编程语言) – 2012-03-20 13:56:53