2

这两个声明有什么区别:

char (*ptr)[N];

对比

char ptr[][N];

谢谢。

4

4 回答 4

4

(一) 申报

char (*ptr)[N];

ptr以下代码pointer to char array of size N 将帮助您了解如何使用它:

#include<stdio.h>
#define N 10
int main(){
 char array[N] = "yourname?";
 char (*ptr)[N] = &array;
 int i=0;
 while((*ptr)[i])
  printf("%c",(*ptr)[i++]);
}

输出:

yourname?  

请参阅:键盘

(2.A)

无效表达式在哪里char ptr[][N];给出错误:array size missing in 'ptr'

但是char ptr[][2] = {2,3,4,5};是一个有效的声明,它是 2D 字符数组。下面的例子:

int ptr[][3] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}};

创建一个3 行和 5 个列的 int 数组Codepade-示例

(2.B) 函数参数的特殊情况!

作为函数参数char ptr[][N];是一个有效的表达式。这意味着ptr可以指向 a 2D char array of N columns

示例:读取输出中的注释

#include <stdio.h>
int fun(char arr[][5]){
  printf("sizeof arr is %d bytes\n", (int)sizeof arr);
}
int main(void) {
  char arr[][6] = {{'a','b'}, {'c','d'}, {'d','e'}};
  printf("sizeof arr is %d bytes\n", (int)sizeof arr);
  printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0]));
  fun(arr);
  return 0;
}

输出:

sizeof arr is 6 bytes   // 6 byte an Array 2*3 = 6
number of elements: 3   // 3 rows
sizeof arr is 4 bytes   // pointer of char 4 bytes

要查看正在运行的示例:codepad

于 2013-03-01T12:00:08.827 回答
2

首先是将ptr声明为指向char数组N的指针
其次将ptr声明为char数组N的数组

请参考链接

于 2013-03-01T12:06:30.520 回答
1

第一个声明一个指向 N 长数组的指针,另一个声明一个二元数组。注意:它们可以用来实现类似的功能,但它们的含义不一样!

于 2013-03-01T12:04:49.343 回答
0

1.ptr 是指向大小为 N 的字符数组的指针 2.ptr 看起来像一个二维数组,但没有提供行数。在二维数组中,行数和列数都是强制性的,因为编译器将决定应该有多少字节按(行数*列数*数据类型大小)分配给数组。此声明可以正常工作,如下所示:

char[][2]={
           {'a','b'}
          };

因为这里编译器会看到并理解只有一行。或者当二维数组作为函数参数传递时,列数(第二维)必须强制提供,传递行数在函数中不是强制性的定义。

于 2013-03-01T12:22:33.073 回答