c - 二维字符数组的 sizeof() 显示错误的 ip

标签 c multidimensional-array sizeof

如果没有从主函数传递单词数组的大小,这个程序只显示一个输出“Hiii”。
如果在 disp 函数中生成大小显示
尺码:48
尺码:2

如果大小是从 main 函数中传递的显示
尺码:48
尺码:48

你好
你好
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)

这是语言中的一种特殊语法,旨在使参数更加 self 记录,但在您所描述的情况下也可能会造成混淆。

在你的例子中,声明:

void disp(char words[][12],int size)

实际上是在说

void disp(char (*words)[12],int size)

也就是说,words 是一个指向 12 个字符数组的指针。在你的例子中,指针的大小是两个字节。

关于c - 二维字符数组的 sizeof() 显示错误的 ip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9781002/

相关文章:

c - 如何初始化一个无符号字符数组?

linq - 通过 LINQ 生成二维数组

c - 结构体指针的 malloc 为何有效?

c - Brainfuck 解释器在 c 打印中遇到麻烦

c - 就性能和可用性而言,您认为编写一个新的 PHP 框架作为 PHP 扩展(用 C 语言)是个好主意吗?

Java二维数组定义

c++ - 当函数有特定大小的数组参数时,为什么要用指针替换它?

c++ - const char * 数组中的元素数

C:在 SQLite 中定义自己的函数而不是回调

有人可以告诉为什么 "-' 0' "在以下函数的第五行中完成