如何制作和使用双指针哪个点(数组指针(?
我的意思是双指针与数组指针混合。.
你会检查最后三行评论吗?
#include <stdio.h>
void func( char(*)[3]);
void func2( char* (*)[3]); // isit right?:-/
//main has a 2dim array and call a func
int main()
{
char tst[2][3] = {"abc", "def"};
func(tst);
return 0;
}
//and some function take that array's pointer
void func( char(* ap)[3])
{
func2(&ap??); // what can be inside ()..?
}
void func2( char* (*ap)[3]) // or char *(*ap[3])???
{
printf("%s", (*ap)[1]); // confusing,,
}
好吧,首先这里有一个小问题:char tst[2][3] = {"abc", "def"};
,你必须在每个字符串的末尾允许一个"\0"。 所以char tst[2][4] = {"abc", "def"};
是必要的。
然后,关于指针,这里有 2 个概念:
-
当作为参数传递给函数时,
char array tst[2][4]
衰减到指向 4 个字符数组的指针,因此一个是正确的:func 接受类型char(* ap)[4]
的参数。 -
在 func 内部,AP 就是这样一个指针。因此,如果要将其地址传递给 func2,func2 会将指向指向 4 个字符数组的指针作为参数,如下所示:
void func2(char (**ap)[4]) { printf("%s", (*ap)[1]); }