C //使用数组指针的双指针。不是指针数组

时间:2017-03-26 13:33:58

标签: c pointers

如何制作和使用双指针(数组指针)?

我的意思是双指针与数组指针混合..

你会检查最后三条评论的行吗?

#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,,
}

1 个答案:

答案 0 :(得分:0)

首先,这里有一个小问题:char tst[2][3] = {"abc", "def"};,您必须在每个字符串的末尾允许一个'\ 0'。因此char tst[2][4] = {"abc", "def"};是必要的。

然后,关于指针,这里有2个概念:

    当将
  1. char array tst[2][4]作为参数传递给函数时,它会衰减为指向4个字符的数组的指针,因此这是正确的:func接受类型为{{ 1}}。

  2. 在func内的
  3. 中,ap就是这样的指针。因此,如果您要将其地址传递给func2,func2将以指向4个字符的数组的指针的指针作为参数,如下所示:

    char(* ap)[4]