定义char a [5]和char(*a)[5]之间有什么区别?

 聪VS霞_539 发布于 2023-01-11 10:42

我只是想确保C语言中*a [5]和(*a)[5]之间的区别.

我知道*a [5]意味着数组a可以有五个元素,每个元素都是指针.所以,

char *p = "ptr1";
char *p2 = "ptr2";
char *a[5] = { p , p2 };

它确实有意义.

但是,当我改变*a[5](*a)[5]这是行不通的.

char (*a)[5] = { p , p2};

究竟(*a)[5]是什么意思?


此外,

有什么区别*a[5]a[5][],和(*a)[5]a[][5]

3 个回答
  • 存在一个很好的网站解码这样的原型:http://cdecl.org/

    char *a[5]   --> declare a as array 5 of pointer to char
    char a[5][]  --> declare a as array 5 of array of char
    char (*a)[5] --> declare a as pointer to array 5 of char
    char a[][5]  --> declare a as array of array 5 of char
    

    2023-01-11 10:43 回答
  • 它们是不同的类型:

    char *a[5];   // array of 5 char pointers.
    char (*a)[5]; // pointer to array of 5 chars.
    

    在第一个示例中,您获得了一个指针数组,因为括号在解析时优先.通过将星号放在括号内,您可以覆盖它并显式地将指针置于更高的优先级.

    2023-01-11 10:44 回答
  • 您使用括号使指针指示符*"更接近"变量,这会改变声明的含义:而不是指针数组,您将获得指向数组的单个指针.

    以下是如何使用它:

    char x[5]={'a','b','c','d','e'};
    char (*a)[5] = &x;
    printf("%c %c %c %c %c\n", (*a)[0], (*a)[1], (*a)[2], (*a)[3], (*a)[4]);
    

    请注意,编译器知道a指向数组:

    printf("%z\n", sizeof(*a)); // Prints 5
    

    在ideone上演示.

    2023-01-11 10:46 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有