我们最近在大学里开了一个关于多种语言编程特色的讲座.
讲师写下了以下功能:
inline u64 Swap_64(u64 x)
{
u64 tmp;
(*(u32*)&tmp) = Swap_32(*(((u32*)&x)+1));
(*(((u32*)&tmp)+1)) = Swap_32(*(u32*) &x);
return tmp;
}
Run Code Online (Sandbox Code Playgroud)
虽然我完全理解这在可读性方面也是非常差的风格,但他的主要观点是这部分代码在生产代码中运行良好,直到它们实现了高优化级别.然后,代码将什么都不做.
他说,变量的所有赋值tmp都将由编译器优化.但为什么会这样呢?
我知道有些情况下变量需要声明为volatile,这样编译器就不会触及它们,即使他认为它们永远不会被读或写,但我不知道为什么会发生这种情况.
我刚刚读到我们需要在C(或C++)中声明它们时给出指针类型,即:
int *point ;
Run Code Online (Sandbox Code Playgroud)
据我所知,指针存储变量的地址,并且地址占用相同数量的内存,无论哪种类型.那么,为什么我们需要声明它的类型?
我有两个指针,
char *str1;
int *str2;
Run Code Online (Sandbox Code Playgroud)
如果我看一下两个指针的大小,我们假设
str1=4 bytes
str2=4 bytes
Run Code Online (Sandbox Code Playgroud)
str1 ++将增加1个字节,但如果str2 ++它将增加4个字节.
这背后的概念是什么?
既a[i]和*(a + i)访问i阵列的第i个元素a.
有理由偏爱一个(性能,可读性等)吗?