鱼C论坛

 找回密码
 立即注册
查看: 2961|回复: 5

《带你学C带你飞》23讲课后作业2个疑惑

[复制链接]
发表于 2018-4-29 18:31:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Luoei 于 2018-4-29 23:09 编辑

1、== 比较 如果是基本类型为什么结果是对?对象却不行?打印两个int类型的地址,并不相同。短时间内,重复运行该程序,为何Xcode控制台打印的地址没有变化?
2、最后一个题,会有编译警告。
源码:
if (i< strlen((*(*array1+j)))) {
                printf("%c ",*(*(*array1 + i ) + j));
}

警告为:Implicitly declaring library function 'strlen' with type 'unsigned long (const char *)'

WX20180429-183044@2x.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-29 20:28:54 From FishC Mobile | 显示全部楼层
1 cpp中的概念:类需要重载 == 才能用做两个对象的比较
2 应该是strlen函数的实参类型强制转换为形参类型引起的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-29 23:32:36 | 显示全部楼层
BngThea 发表于 2018-4-29 20:28
1 cpp中的概念:类需要重载 == 才能用做两个对象的比较
2 应该是strlen函数的实参类型强制转换为形参类型 ...

为什么基本类型地址不一样,结果却是对的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-30 08:30:45 From FishC Mobile | 显示全部楼层
Luoei 发表于 2018-4-29 23:32
为什么基本类型地址不一样,结果却是对的呢?

比较的是两个值的大小,又不是比较地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-1 01:15:18 | 显示全部楼层
BngThea 发表于 2018-4-30 08:30
比较的是两个值的大小,又不是比较地址

看到这个链接下面3楼回复:http://bbs.chinaunix.net/thread-4116231-1-1.html。为何基础类型比较的是内容而字符串确实地址呢?== 与基础类型的地址有关系吗?
对于C语言而言:
      如果都是常量字符串,那么可以用==来比较字符串地址;在同一个编译模块中,也可以用==来比较字符串内容。
      如果不是常量字符串,用==只能比较地址
对于C++语言而言:
      无论是不是常量字符串,用==只能比较地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-1 15:56:17 | 显示全部楼层
Luoei 发表于 2018-5-1 01:15
看到这个链接下面3楼回复:http://bbs.chinaunix.net/thread-4116231-1-1.html。为何基础类型比较的是内 ...

因为 == 比较的是指针基础类型也一样的
C语言中提供一个比较字符串内容的函数(用函数来实现) == 对比的都是地址对于C来说 函数贴图如下
strcmp()函数有许多变体,它们的基本功能是相同的,都是比较两个字符串,但其它地方稍有差别。下表列出了C语言提供的与strcmp()函数类似的一些函数:   
-----------------------------------------------------------------
    函  数  名                   作  用
-----------------------------------------------------------------
    strcmp()         对两个字符串进行大小写敏感的比较
    strcmpi()        对两个字符串进行大小写不敏感的比较
    stricmp()        同strcmpi()
    strncmp()        对两个字符串的一部分进行大小写敏感的比较
    strnicmp()       对两个字符串的一部分进行大小写不敏感的比较
-----------------------------------------------------------------
在前面的例子中,如果用strcmpi()函数代替strcmp()函数,则程序将认为字符串“ABC”等于“abc”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 21:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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