相关疑难解决方法(0)

对于数组,为什么a [5] == 5 [a]?

正如Joel在Stack Overflow播客#34中用C编程语言(又名:K&R)所指出的那样,在C中提到了数组的这种属性:a[5] == 5[a]

乔尔说,这是因为指针运算,但我仍然不明白.为什么a[5] == 5[a]

c arrays pointers pointer-arithmetic

1567
推荐指数
16
解决办法
9万
查看次数

在这种情况下,C是否正确处理sizeof(...)和sizeof ...

在下面的代码中,功能testtest2等效的是什么?

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)

换一种说法:

  1. 是否roflsizeof(rofl)正确挑选rofl 类型,因为括号?
  2. 是否roflsizeof *rofl正确地挑选rofl 可变的,因为一个缺少括号?

注意:这是一个看起来很愚蠢的例子,但在实践中实际上你可以使用与变量名相同的类型名称.因此问题.

c sizeof unary-operator

38
推荐指数
2
解决办法
1748
查看次数

使用 sizeof 运算符时的意外行为

#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

在上一个答案中,我了解到这 …

c sizeof

3
推荐指数
1
解决办法
82
查看次数

sizeof 接受什么类型的参数?

我有以下代码:

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)

有人能告诉我为什么吗?

c

0
推荐指数
1
解决办法
127
查看次数

Sizeof const char* 错误值

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) = 4sizeof ar[0] = 1。为什么?我认为它 ( size_of_array) 必须是2

objective-c ios

-1
推荐指数
1
解决办法
1099
查看次数