C->last=A.last>B.last?A.last:B.last;
三目运算符,把比较结果赋值给C的last属性
给C->last赋值为A和B->last的较大值
c函数直接给last赋值:如果A.last大于B.last则返回A.last,否则返回B.last
首先,整体是个三元运算符
a>b?a:b
当a大于b时,返回a,否则返回b
返回的值赋值给c
再看A.last,B.last,C->last
A,B是结构体对象,所以用点访问成员
C是个指针,所以用->符号访问成员
比较两个结构体A和B中的last成员变量的大小,将较大的值赋给另一个结构体C的last成员变量。
前面我们介绍了指针类型中有整形指针、字符指针、浮点型指针……这里为什么要把字符指针特别拿出来介绍呢?因为字符指针还有一种特殊用法。
int main()
{
const char* pstr = "hello bit.";//这里是把一个字符串放到pstr指针变量里了吗?
printf("%s\n", pstr);
return 0;
}
注释:这段代码很容易误认为是把字符串 hello bit 放到字符指针 pstr 里了,但是本质是把字符串 hello bit. 首字符的地址放到了pstr中。这里用const修饰是因为"hello bit."是常量字符串,不能修改。
📝一道面试题
#include <stdio.h>
int main()
{
char str1[] = "hello bit.";
char str2[] = "hello bit.";
const char *str3 = "hello bit.";
const char *str4 = "hello bit.";
if(str1 ==str2)
printf("str1 and str2 are same\n");
else
printf("str1 and str2 are not same\n");
if(str3 ==str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}
分析:str1
和str2
两个数组被初始化相同的值,str1和str2为数组名代表首元素的地址,对于数组来说每次初始化都会开辟独立的内存空间,由于数组str1和数组str2分别占据不同的内存空间,即首元素地址各不相同,所以str1不等于str2。对于str3
和str4
,初始化为常量字符串,由于常量字符串不可修改,所以从内存优化的角度来说,在内存中每个常量字符串只存在一份即可,即str3和str4对应的是同一块内存空间,故str3和str4相等。