#include <stdio.h>
#include <stdlib.h>
typedef struct StupidAssignment{
long length;
char* destination_ip;
char* destination_port;
long timestamp;
long uid;
char* message;
}packet;
void main(){
int number_of_packets=10;int i;
packet* all_packets[number_of_packets];
for(i=0;i<number_of_packets;i+=1)all_packets[i]=malloc(sizeof packet);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段不会编译,并出现以下错误:-
reciever.c: In function ‘main’:
reciever.c:16:64: error: expected expression before ‘packet’
for(i=0;i<number_of_packets;i+=1)all_packets[i]=malloc(sizeof packet);
Run Code Online (Sandbox Code Playgroud)
但是,以下代码确实可以编译:-
#include <stdio.h>
#include <stdlib.h>
typedef struct StupidAssignment{
long length;
char* destination_ip;
char* destination_port;
long timestamp;
long uid;
char* message;
}packet;
void main(){
int number_of_packets=10;int i;
packet* all_packets[number_of_packets];
for(i=0;i<number_of_packets;i+=1)all_packets[i]=malloc(sizeof(packet));
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是sizeof(packet)和sizeof packet。
在上一个答案中,我了解到这sizeof只是一个运算符,return因此括号是可选的。
我显然错过了一些东西,所以有人可以向我解释这种行为吗?
将sizeof运算符与类型一起使用时,必须将类型放在括号中。
将sizeof运算符与变量一起使用时,您可以省略括号。
参见§6.5.3 一元运算符和§6.5.3.4 C11 草案中的 sizeof 和 _Alignof 运算符。感谢@JonathanLeffler 识别这些部分。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |