回答
(1)声明
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?
参见: Codepad
(2.A)
凡为char ptr[][N];
是一个无效的表达产生了错误:array size missing in 'ptr'
。
但是char ptr[][2] = {2,3,4,5};
是一个有效的声明,它是2D char数组。下面的例子:
int ptr[][3] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}};
创建的3行5个COLS一个int数组。 Codepade-Example
(2.B)功能参数的特例!
由于函数参数char ptr[][N];
是一个有效的表达式。这意味着ptr
可以指向一个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
OP可能意味着要求区分2种类型而不是2种声明。 'char ptr [] [N]'是函数参数的有效描述。 – SomeWittyUsername 2013-03-01 12:03:27
@icepack我想他可能会问函数指针,然后他指定,他还加了一个';'。为什么。任何方式你**正确** – 2013-03-01 12:05:56
@icepack巧合是我问[第二次关于函数参数](http://stackoverflow.com/questions/15151803/pass-pointer-array-to-function?answertab=active #tab-top)今天。好点子。 – 2013-03-01 12:13:52
第一声明了一个指针到一个N-长阵列,所述其他人声明了两个二元数组。 注意:他们可以用来实现类似的功能,但他们的意思不一样!
首先是声明PTR作为指针炭的数组n
第二个是声明PTR为阵列N阵列炭
PLZ参阅link
1.ptr被指针字符数组大小为N 2. ptr看起来像一个二维数组,但不提供行数。在二维数组中,行和列的数量都是强制的,因为编译器将决定应该为数组分配多少个字节((行数*列数*数据类型的大小)。该声明可以正常工作,如下所示:
char[][2]={
{'a','b'}
};
因为这里编译器会查看并理解有一行。或者当一个二维数组作为函数参数传递时,列的数量(第二维)必须由强制提供,行在函数定义中不是强制的。
[cdecl](http://cdecl.org/)很棒。 (尽管它叫第一个语法错误。) – 2013-03-01 20:09:44
(不喜欢ptr作为var名称,并且需要字面维数。) – 2013-03-01 20:17:01