Luoei 发表于 2018-4-29 18:31:28

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

本帖最后由 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 *)'

BngThea 发表于 2018-4-29 20:28:54

1 cpp中的概念:类需要重载 == 才能用做两个对象的比较
2 应该是strlen函数的实参类型强制转换为形参类型引起的

Luoei 发表于 2018-4-29 23:32:36

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

为什么基本类型地址不一样,结果却是对的呢?

BngThea 发表于 2018-4-30 08:30:45

Luoei 发表于 2018-4-29 23:32
为什么基本类型地址不一样,结果却是对的呢?

比较的是两个值的大小,又不是比较地址

Luoei 发表于 2018-5-1 01:15:18

BngThea 发表于 2018-4-30 08:30
比较的是两个值的大小,又不是比较地址

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

理想小青年 发表于 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”
页: [1]
查看完整版本: 《带你学C带你飞》23讲课后作业2个疑惑