找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1341|回复: 3
打印 上一主题 下一主题
收起左侧

C语言指针和数组,问了多次还是不明白,请高手来看看哈

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:879924 发表于 2021-12-24 22:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1>    char arrc[][5] = { {'0','0','0','0','\0'},{'0','0','0','0','\0'}, {'0','0','0','0','\0'}, {'0','0','0','0','\0'}, {'0','0','0','0','\0'} };
2>    char* ptrc[5] = { {'0','0','0','0','\0'}, {'0','0','0','0','\0'}, {'0','0','0','0','\0'}, {'0','0','0','0','\0'}, {'0','0','0','0','\0'} };
3>    char arrs[][5] = { "0000","0000","0000","0000","0000" };
4>    char* ptrs[5] = { "0000","0000","0000","0000","0000" };
1.请问这四种方式有什么不同?
2.请问字符串就是字符数组+空字符这种说法正确吗?书上都是这么说,但如果正确的话,为什么第2个赋值是错误的?
3.如果把1和2的值改成下面这样呢?也就是在'\0'后面再加一个'0',会被截断吗?但是访问的话,可以访问到这个'0'啊!
{ {'0','0','0','0','\0','0'}, {'0','0','0','0','\0','0'}, {'0','0','0','0','\0','0'}, {'0','0','0','0','\0','0'}, {'0','0','0','0','\0','0'} };

感谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:908826 发表于 2021-12-25 08:45 | 只看该作者
13都是二维数组,34是指针数组,数组里面的每一个元素都是指针。你最好找本书c或者c++仔细看看这里。"abcd"和'a''b''c''d''\0'是一样的,拆开写最后一个是结束符。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:844772 发表于 2021-12-25 10:31 | 只看该作者
指针和数组在使用过程中比较类似,但不能像数组在定义时赋值。
简单理解,指针要给它地址,而{'0','0','0','0','\0'},无法转换成一个字符指针类型的值,所以报错。数组定义时,已经分配了地址(或者说存储空间),所以只要保存字符就行了。
但你可以这么用 char* ptrc =arrcr; 实质是将字符数组(左值)第一个元素的地址取出来,然后存在字符指针类型的变量里。也就是说,能存在p中的值只能是字符指针类型的值。
另外,习惯字符串后面再加一个'0',只要为了程序判断结尾方便,并不是'\0'必须在后面,你后边你爱用啥都行,但写程序判断或显示时,不方便。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:879924 发表于 2021-12-25 21:19 | 只看该作者
glinfei 发表于 2021-12-25 10:31
指针和数组在使用过程中比较类似,但不能像数组在定义时赋值。
简单理解,指针要给它地址,而{'0','0','0' ...

讲解非常明确!!!感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表