让我们通过下面的例子,来了解 c语言中字符数组和字符指针之间的区别。
void test(){ //arr is array of characters char arr[12] = aticleworld; //ptr is pointer to char char *ptr = aticleworld;}现在,让我们比较arr(字符数组)和ptr(字符指针)。
区别1: 字符串文本是用双引号括起来的零个或多个多字节字符的序列。当你编写语句 char arr[12] = aticleworld 时,字符串文本中的字符被复制到 arr. 当您编写语句 char *ptr = aticleworld 时,您是让字符串文本数组进行数组到指针的转换,以获取指向其第一个元素的指针。指针 ptr 指向字符串文本数组的第一个元素 ('a').
区别2: arr 是存储在连续内存位置的字符集合,而 ptr 保存字符的地址。
arr 包含 12 个元素,每个元素位于连续的内存位置。另一方面,ptr 保存字符串文本的第一个字符的地址。
区别3:当我们在 char 数组 arr 上使用 sizeof 运算符时,它给出字符总数,而 char 指针 ptr 只给出指针的大小。如下:
#include int main(){ //arr is array of characters char arr[] = aticleworld; //ptr is pointer to char char *ptr = aticleworld; printf(size of arr %ld, sizeof(arr)); // sizeof a pointer is printed which is same for all type // of pointers (char *, void *, etc) printf(size of ptr %ld, sizeof(ptr)); return 0;}
输出
size of arr 24size of ptr 4区别4: 和指针之间的另一个重要区别是,我们可以增加指针,但不能创建数组的增量。例arr++ =>非法语句。ptr++ ==>正常语句。区别5:我们可以将值重新分配给数组,但字符串文本不可修改。如果程序尝试修改由字符串文本形成的静态数组,则行为未定义。例
//arr is array of characterschar arr[] = aticleworld;gets(arr); fgets(arr,sizeof(arr),stdin); //有效表达式scanf(%s, arr); //有效表达式strcpy(arr, aticle); //有效表达式arr[0] = 'a'; //有效表达式arr[10] = 'm'; //有效表达式arr[11] = 'm'; //有效表达式
char *ptr = aticleworld;ptr[0] = 'p'; //无效表达式*ptr = 'w'; //无效表达式无别6: 未初始化的指针也可能导致未定义的行为。请参阅以下示例。char *ptr;ptr[0] = 'a'; //未定义的行为gets(ptr); //未定义的行为scanf(“%s”, ptr); //未定义的行为strcpy(ptr, “source”); //未定义的行为strcat(ptr, “second string”); //未定义的行为区别7: char数组本质上是静态的,这意味着您无法调整数组的大小,而使用指针,您可以在任何时间点更改分配的内存的大小。
区别8:数组完全由程序控制。它将正确分配所需的内存,并在超出范围时自动释放内存。但是,如果分配动态内存,则char指针的情况有所不同,您必须手动取消分配它,否则会引入内存泄漏。例
void foo1(){ //arr是字符数组 char arr[12] = aticleworld;}//issue memory leakvoid foo2(){ char *ptr = (char*)malloc(12); //忘记释放内存}
进军太阳能?钰泰半导体推出带MPPT、大功率路径管理的ETA6015宽电压充电IC
如何使用Blynk的家庭自动化
摆动型音圈马达在激光雷达中的应用
u-blox发布基于Espressif ES32-S3芯片的NORA-W10模块
人工智能有没有道德边界
C语言中的char数组和char指针有什么区别?
关于中国移动行业5G应用和发展机遇的深入探讨
数据库数据恢复-SQL SERVER数据库MDF (NDF)或LDF损坏的数据恢复方案
商业照明领域又添“双高”新军——C²OB®
PLC自动控制器的硬件组成
三极管的判定步骤
USB硬件接口类型速览
如何才能有效地缓解海量真实源DDoS攻击
Symbio正与日产丰田合作提高机器人效率
中国的光刻机与荷兰光刻机技术相比,主要区别是什么
笔记本售后服务,用户不能承受之痛
讯景RX5700系列非公版显卡发布 售价3299元
基于RFID技术和物联网技术的车辆防盗怎样实现
如何用一行代码解决空指针问题
国产生物芯片如何追赶国际水平?