如何在 C 语言中声明一个字符数组的指针?

4
我该如何在C语言中声明一个字符数组的指针?

我很想说一些尖刻的话,比如“读指定的章节”……无论如何,你需要更多的信息:语言?总体目标?背景?这似乎不符合该网站问题的期望标准。 - corsiKa
2
你真的需要一个指向数组的指针吗?还是需要一个指向数组首元素的指针?你了解cdecl吗? - Carl Norum
稍微解释一下卡尔的观点:指向数组的指针是可能的,但很少(非常非常少)需要或想要。大多数情况下,你需要一个指向(通常是const的)char的指针。 - Jerry Coffin
感谢@CarlNorum的回答,有趣的是我本来期望从cplusplus.com上找到相关页面,但这个链接排名更高,这很好因为现在我知道了cdecl! - MDMoore313
2个回答

11

我想我会分几个部分来回答:

  1. 这里是一个指向 char 数组的指针(我假设它是一个包含10个元素的数组):

char (*x)[10];

让我们从基础开始逐步分解:

x

是一个指针:

*x

转换为数组:

(*x)[10]

有关 char 的:

char (*x)[10]
然而,大多数情况下,您并不真正需要一个指向数组的指针,而是需要一个指向数组第一个元素的指针。在这种情况下:
char a[10];
char *x = a;
char *y = &a[0];

你要找的是xy,它们是等价的。

  • 提示:学习cdecl可以让这些问题更容易解决。


  • 1
    @Carl 我觉得你在第二项中漏掉了一些星号。 - sidyll
    是的 - 绝对没错。谢谢,@sidyll!如果你在将来看到我这样做,请随意自行编辑 - 似乎你有足够的声望来这样做。 - Carl Norum
    1
    好吧,我只是不想破坏那位我非常尊敬的用户答案的完整性! - sidyll

    3
    你可以将其声明为extern char (*p)[];,但这是一种不完整类型。当然,这是因为C语言没有通用的“数组”类型,只有特定大小的数组才是完整的类型。

    以下代码可以正常工作:

    extern char (*p)[];
    
    char arr[20];
    
    char (*p)[20] = &arr;  // complete type now: p points to an array of 20 chars
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接