正如Joel在Stack Overflow播客#34中用C编程语言(又名:K&R)所指出的那样,在C中提到了数组的这种属性:a[5] == 5[a]
乔尔说,这是因为指针运算,但我仍然不明白.为什么a[5] == 5[a]
?
在下面的代码中,功能test
和test2
等效的是什么?
typedef int rofl;
void test(void) {
rofl * rofl = malloc(sizeof(rofl)); // Is the final rofl here the TYPE?
}
void test2(void) {
rofl * rofl = malloc(sizeof *rofl); // Is the final rofl here the VARIABLE?
}
Run Code Online (Sandbox Code Playgroud)
换一种说法:
rofl
在sizeof(rofl)
正确挑选rofl
类型,因为括号?rofl
在sizeof *rofl
正确地挑选rofl
可变的,因为一个缺少括号?注意:这是一个看起来很愚蠢的例子,但在实践中实际上你可以使用与变量名相同的类型名称.因此问题.
#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
。
在上一个答案中,我了解到这 …
我有以下代码:
void main(int argc, char *argv[]){
for (int i=1; i<argc; i++){
printf("%s-%lu\t", argv[i], sizeof(argv[i]));
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这$./a.out int long
应该给我
short-2 int-4 long-8
Run Code Online (Sandbox Code Playgroud)
但我得到了
short-8 int-8 long-8
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么吗?
NSString *lang = @"en";
const char* ar = [lang UTF8String];
int size_of_array = (sizeof ar) / (sizeof ar[0]);
Run Code Online (Sandbox Code Playgroud)
size_of_array
是等于4
和(sizeof ar) = 4
和sizeof ar[0] = 1
。为什么?我认为它 ( size_of_array
) 必须是2
。