C语言中的char (*)[20]是什么意思?

问题描述 投票:0回答:1

我知道下面的代码是无效的,因为 %s 期待一个类型为 char * 但我给了一个类型为 char **.

#include <stdio.h>
struct employee
{
    int id;
    char name[20];
    float salary;
};
int main(void)
{
    struct employee e;
    scanf("%19s", &e.name);//Invalid line
    printf("%s", e.name);
}

但我得到一个不同的警告。

./ Playground / file0. c: In function main:. / Playground / file0. c: 11: 15: warning: format '% s' expects argument of type' char * ', but argument2 has type char (*) [20]' [- Wformat =] 11 | scanf ("% 195", & e. name); | char (*) [20] char *

我非常确定 char **char (*)[20] 是有些等价的,但不知道是怎么一回事。

char **: 指针指向一个char的指针。

char (*)[20]: 一个指向char的指针数组。- 不知道我的理解是否完全正确。

我不明白。它们是如何等价的?请赐教。

c pointers char
1个回答
0
投票

类型 char (*)[20] 读作 "指向大小为20的数组的指针"。char. 它是 的指针数组。char.

指针数组(大小为20)。char 将是 char *[20]. 因为这是一个数组,它可以 衰败 为指向数组中第一个元素的指针。 由于数组的元素类型为 char *,这样的指针将具有 char **.

回到你的代码。e.name 有型 char [20]即20个大小的数组,其中 char. 从这里可以看出: &e.name 有型 char (*)[20]即指向大小为20的数组的指针。char.

© www.soinside.com 2019 - 2024. All rights reserved.