“char(* p)[5]”的含义是什么?
发布时间:2020-12-16 05:54:38 所属栏目:百科 来源:网络整理
导读:人. 我想抓住这三个声明之间的差异: char p[5];char *p[5];char (*p)[5]; 我试图通过做一些测试找到这个,因为阅读声明和这样的东西的每个指南迄今没有帮助我.我写了这个小程序,它不工作(我尝试过其他种类的使用第三个声明,我已经用完了选项): #include std
人.
我想抓住这三个声明之间的差异: char p[5]; char *p[5]; char (*p)[5]; 我试图通过做一些测试找到这个,因为阅读声明和这样的东西的每个指南迄今没有帮助我.我写了这个小程序,它不工作(我尝试过其他种类的使用第三个声明,我已经用完了选项): #include <stdio.h> #include <string.h> #include <stdlib.h> int main(void) { char p1[5]; char *p2[5]; char (*p3)[5]; strcpy(p1,"dead"); p2[0] = (char *) malloc(5 * sizeof(char)); strcpy(p2[0],"beef"); p3[0] = (char *) malloc(5 * sizeof(char)); strcpy(p3[0],"char"); printf("p1 = %snp2[0] = %snp3[0] = %sn",p1,p2[0],p3[0]); return 0; } 第一和第二件作品还好,我已经明白了他们做了什么.第三个声明的含义和正确的使用方法是什么? 谢谢! 解决方法
第三个是一个指向5个字符的数组的指针,而第二个是一个指向char的5个指针的数组.
想像这样: ________ _____________________ |0x7777| -------> | H | e | l | l | o | |______| |_0_|_1_|_2_|_3_|_4_| p ^ | 0x7777 而第二个看起来像这样: "abc" "def" "ghi" "jkl" "mno" ^ ^ ^ ^ ^ | | | | | ____________________________________ |0x9999|0x7777|0x3333|0x2222|0x6666| |___0__|___1__|___2__|___3__|___4__| p 这是理解指针和数组之间差异至关重要的情况之一.数组是一个对象,其大小是每个元素的大小乘以计数,而指针只是一个地址. 在第二种情况下,sizeof(p)将产生5 * the_size_of_a_pointer. 在第三种情况下,sizeof(p)将产生size_of_a_pointer,通常为4或8,这取决于目标机器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c – 如何根据QSignalMapper获取QList的索引
- c# – 如果itemsource中不存在值,则Combobox指定null
- PostgreSQL流复制参数max_wal_senders详解
- MongoDB入门教程之索引操作浅析
- ajax – 如何在Elm Client和Haskell(Yesod)服务器之间发送J
- React组件方法中为什么要绑定this
- c# – 在String.Format()中显式转换int的原因是什么
- Ajax中使用Json传递数据
- 【Oracle】 Blob转Clob的字符UTF16转换UTF8问题
- 初识DDD(Domain Driven Design) (一):软件工程视角