C/C++中一些不太注意到的小知识点--[锦集]

C/C++小知识点--[锦集]

“=”和“<=” 的优先级

1.( (file_got_len = recv_str(sock,buf,BUF_SIZE) ) <= 0)

2.( file_got_len = recv_str(sock,buf,BUF_SIZE) <= 0 )

第二种情况下,当recv_str()函数成功返回发送字符串的时候,尽管会成功返回发送字节数大于0,

但是,file_got_len只会返回0,

因为“<=”的优先级大于“=”。

所以在多语句写在一起时,最好用() 明示!!

运算操作符

int i,t;
t = (i=1)+(++i);

输出

t= 4

i首先被赋值1,随后++i,使i的值变为2,到做加法的操作的时候,两个操作数都要读i此时的值,结果是两个2相加,等于4.

其汇编程序(基于vs2010),如下:

int i,t;
t = (i=1)+(++i);
011413FE mov dword ptr [i],1
01141405 mov eax,dword ptr [i]
01141408 add eax,1
0114140B mov dword ptr [i],eax
0114140E mov ecx,dword ptr [i]
01141411 add ecx,dword ptr [i]
01141414 mov dword ptr [t],ecx

i自加后,只保留在eax 寄存器里,然后将eax的2赋给i,所以,i 就变成2了。此处和动态语言的引用似乎有所类似。

sizeof操作符与数组

int t,tt,num;
int array[5];
int *p = array; t= sizeof(p); //t =4
t= sizeof(int [5]); // t= 20
tt = sizeof(array); // tt = 20
num = sizeof(array)/sizeof(array[0]); // get the number of array . num =5

开始自以为,数组名不是首地址嘛。 应该是一个指针,然后对指针sizeof ,应该是4

个字节才对,为什么呢?

此时sizeof的是整个数组,而非首指针

要学会多查看MSDN,解释如下:

05-11 11:30