让我们通过下面的例子,来了解 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 只给出指针的大小。如下:
#includeint 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 24 Size of ptr 4区别4: 和指针之间的另一个重要区别是,我们可以增加指针,但不能创建数组的增量。例
arr++ =>非法语句。 ptr++==>正常语句。区别5:我们可以将值重新分配给数组,但字符串文本不可修改。如果程序尝试修改由字符串文本形成的静态数组,则行为未定义。例
//arr is array of characters char 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 leak void foo2() { char *ptr = (char*)malloc(12); //忘记释放内存 }
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
180文章
7597浏览量
136121 -
字符
+关注
关注
0文章
232浏览量
25170 -
指针
+关注
关注
1文章
479浏览量
70506 -
数组
+关注
关注
1文章
414浏览量
25905 -
char
+关注
关注
0文章
11浏览量
3703
原文标题:【软件】C语言中的char数组和char指针有什么区别?
文章出处:【微信号:玩转单片机与嵌入式,微信公众号:玩转单片机与嵌入式】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
char *和char数组的区别及内核访问用户区
的也就是两个指针了,而对于char数组 pa2,它的内存表示就是s1的15个字节而s2的15个字节连续排放,整个结构就是实实在在的数据,我们传入send就将s1和s2的内容一块传送出去 了,而不仅仅
发表于 04-02 14:36
•3144次阅读
MCU_C语言中 数组型指针 的应用 -- char (*stringp)[]
定义一个指向数组的指针stringpchar (*stringp)[];取得某个数组的地址 :char *dst = &string[10];
发表于 11-29 18:06
•2次下载
评论