【软件】C语言中的char数组和char指针有什么区别?
来源:玩转单片机与嵌入式 发布时间:2022-08-05 分享至微信
void test()
{
//arr is array of characters
char arr[12] = "Aticleworld";
//ptr is pointer to char
char *ptr = "Aticleworld";
}
arr 包含 12 个元素,每个元素位于连续的内存位置。另一方面,ptr 保存字符串文本的第一个字符的地址。
区别3:
#include <stdio.h>
int main()
{
//arr is array of characters
char arr[] = "Aticleworld";
//ptr is pointer to char
char *ptr = "Aticleworld";
printf("Size of arr %ld\n", 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
arr++ =>非法语句。
ptr++==>正常语句。
我们可以将值重新分配给数组,但字符串文本不可修改。如果程序尝试修改由字符串文本形成的静态数组,则行为未定义。例
//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';//无效表达式
char *ptr;
ptr[0] = 'A'; //未定义的行为
gets(ptr); //未定义的行为
scanf(“%s”, ptr); //未定义的行为
strcpy(ptr, “source”); //未定义的行为
strcat(ptr, “second string”); //未定义的行为
数组完全由程序控制。它将正确分配所需的内存,并在超出范围时自动释放内存。但是,如果分配动态内存,则char指针的情况有所不同,您必须手动取消分配它,否则会引入内存泄漏。例
voidfoo1()
{
//arr是字符数组
chararr[12] ="Aticleworld";
}
//Issue memory leak
voidfoo2()
{
char*ptr = (char*)malloc(12);
//忘记释放内存
}
[ 新闻来源:玩转单片机与嵌入式,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论
暂无评论哦,快来评论一下吧!
玩转单片机与嵌入式
专注单片机、嵌入式、学习资料、最新设计、案例等。以单片机为起点,带你玩转单片机、嵌入式设计。
查看更多
相关文章
超微进军AI软件,推出小型语言模型AMD-135M
2024-10-05
弧形导轨有什么优势及局限?
一周前
滚珠丝杆的制作工艺和用途有哪些?
2024-10-25
AI的未来:自主代理将超越传统大语言模型
2 天前
和硕OCP峰会展出新款AI服务器,专注AI和大语言模型训练
2024-10-17
热门搜索