[英]What does char (*)[20] in C mean?
我知道下面的代碼無效,因為%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 的指針數組。 — 不確定我是否完全正確。
我不明白。 它們如何等效? 請賜教。
char (*)[20]
類型被讀作“指向char
大小為 20 的數組的指針。它不是指向char
的指針數組。
指向char
的指針數組(大小為 20)將是char *[20]
。 因為這是一個數組,它可以衰減為指向數組第一個元素的指針。 由於數組的元素是char *
類型,因此這樣的指針將具有char **
類型。
回到您的代碼, e.name
的類型為char [20]
,即char
大小為 20 的數組。 從那里可以看出&e.name
的類型為char (*)[20]
,即指向char
大小為 20 的數組的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.