两个struct结构体进行比较,
首先不能直接比较。
struct A a,b;
a和b相比是错误的。
其次不能进行内存比较。
如下,程序运行的结果会如何?
void DiffStructWithMultiVar()
{
struct A a = {0};
struct B b = {0};
//illegal compare
if (memcmp(&a, &b, sizeof(struct A)) == 0)
printf("a = b [%d]-[%d]\n", sizeof(a), sizeof(b));
else
printf("a != b [%d]-[%d]\n", sizeof(a), sizeof(b));
}
结果如下
但是,这时候会发现,两个结构体是不一样的,可是结果却一样。
两个不一样的结构体,其大小是一致的,这就是字节对齐的结果
并且,这样不一样的结构体,比较是没有意义的。
在面试中,如果问你,结构体可以进行比较吗?要注意分清楚是否是相同的结构体,一样的结构体可以比较,不一样的结构体,肯定不能比较。
最后结论:
定义相同的结构体可以进行比较,不同的不行,因为结构体有字节对齐的问题。
留下一个问题,下面两个结构体
按如下函数进行运行,最终结果是?为什么?