《带你学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 *)'
1 cpp中的概念:类需要重载 == 才能用做两个对象的比较
2 应该是strlen函数的实参类型强制转换为形参类型引起的 BngThea 发表于 2018-4-29 20:28
1 cpp中的概念:类需要重载 == 才能用做两个对象的比较
2 应该是strlen函数的实参类型强制转换为形参类型 ...
为什么基本类型地址不一样,结果却是对的呢? Luoei 发表于 2018-4-29 23:32
为什么基本类型地址不一样,结果却是对的呢?
比较的是两个值的大小,又不是比较地址 BngThea 发表于 2018-4-30 08:30
比较的是两个值的大小,又不是比较地址
看到这个链接下面3楼回复:http://bbs.chinaunix.net/thread-4116231-1-1.html。为何基础类型比较的是内容而字符串确实地址呢?== 与基础类型的地址有关系吗?
对于C语言而言:
如果都是常量字符串,那么可以用==来比较字符串地址;在同一个编译模块中,也可以用==来比较字符串内容。
如果不是常量字符串,用==只能比较地址
对于C++语言而言:
无论是不是常量字符串,用==只能比较地址
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]