初始化一个(空?)字符串数组并初始化第一个元素上的指针。
&arrayofstrings 的类型是char (*)[3][100],即指向一个对象的指针,该对象是char 类型的2D 数组,维度为3 x 100。所以,这个初始化
char (*pointer)[3][100] = &arrayofstrings;
不是用arrayofstrings数组的第一个元素初始化pointer,而是pointer将指向整个2D数组arrayofstrings。这就是为什么,当使用 pointer 访问元素时,需要用括号括起来 -
`(*pointer)[0]` -> first string
`(*pointer)[1]` -> second string and so on..
这是一个好方法吗?有没有更简单的方法?
如果你想要指向数组arrayofstrings 的第一个元素的指针,那么你可以这样做
char (*p)[100] = &arrayofstrings[0];
或者
char (*p)[100] = arrayofstrings;
&arrayofstrings[0] 和 arrayofstrings 是等价的1)。
将其传递给函数并访问数组:
function() 函数签名应该是 -
int function (char (*pointer)[100])
// if you want the function should be aware of number of rows, add a parameter for it -
// int function (char (*pointer)[100], int rows)
这相当于
int function (char pointer[][100])
并像这样从main()函数调用它-
function (p);
在function() 函数中,您可以使用p[0], p[1] ... 访问数组:
演示示例程序:
#include <stdio.h>
#include <string.h>
#define ROW 3
#define COL 100
void function (char (*p)[COL]) {
strcpy (p[0], "string one");
strcpy (p[1], "string two");
strcpy (p[2], "string three");
}
int main(void) {
char arrayofstrings[ROW][COL] = {0};
char (*pointer)[COL] = &arrayofstrings[0];
function (pointer);
for (size_t i = 0; i < ROW; ++i) {
printf ("%s\n", arrayofstrings[i]);
}
return 0;
}
- 当您访问一个数组时,它会被转换为指向第一个元素的指针(这条规则很少有exceptions)。