Tag: struct

通过结构别名arrays

我正在阅读ISO / IEC 9899:TC2中第6.5段的第7段。 它通过以下方式宽恕对对象的左值访问: 一种聚合或联合类型,包括其成员中的上述类型之一(包括递归地,子聚合或包含联合的成员), 请参阅文档,了解“前面提到的”类型,但它们肯定包含对象的有效类型。 它的部分标注为: 此列表的目的是指定对象可能或可能不具有别名的情况。 我读到这个说(例如)以下是明确定义的: #include #include typedef struct { unsigned int x; } s; int main(void){ unsigned int array[3] = {73,74,75}; s* sp=(s*)&array; sp->x=80; printf(“%d\n”,array[0]); return EXIT_SUCCESS; } 该程序应输出80。 我不是在提倡这是一个好的(或非常有用的)想法,并承认我在某种程度上解释它是因为我无法想到其他意味着什么也不能相信它是一个毫无意义的句子! 也就是说,我看不出有理由禁止它。 我们所知道的是该位置的对齐和内存内容与sp->x兼容,为什么不呢? 它似乎甚至可以说我是否加了(比方说) double y; 在结构的末尾,我仍然可以通过sp->x访问array[0] 。 然而,即使数组大于sizeof(s)任何访问sp->y尝试都是’所有下注’未定义的行为。 可能我礼貌地要求人们说出那句话宽恕而不是进入一个扁平的旋转喊“严格混淆UB严格别名UB”似乎经常是这些事情的方式。

如何找到结构的大小?

struct a { char *c; char b; }; sizeof(a)是什么?

使用带有结构数组的qsort需要帮助

现在,我已经看到了各种各样的例子,但我不明白他们的意思。 这是我的结构 typedef struct profile{ char gender[1]; double soc; . . . } PROFILE; soc是社会安全号码,我将要排序。 我知道你需要一个比较function,但我不知道如何提出我需要的确切内容。

是否可以通过成员地址访问结构的大小,并分配足够的空间?

具体来说,是下面的代码,标记下方的行,好吗? struct S{ int a; }; #include int main(){ struct S *p; p = malloc(sizeof(struct S) + 1000); // This line: *(&(p->a) + 1) = 0; } 人们在这里争论,但没有人给出令人信服的解释或参考。 他们的论点略有不同,但基本相同 typedef struct _pack{ int64_t c; } pack; int main(){ pack *p; char str[9] = “aaaaaaaa”; // Input size_t len = offsetof(pack, c) + (strlen(str) + 1); […]

如果在int之后出现char,为什么要添加填充?

例如,有一种结构 struct A { char a; int i; }; 在这种情况下,我们有[1字节] +填充[3字节] + int [4字节] = 8。 现在让我们对上面的struct进行一些更新, struct A { int i; char a; }; 在这种情况下,char来自int并且不需要添加填充字节,这意味着sizeof(A)= 5字节,但在这种情况下我也得到8字节的结果。 为什么? 好的,这个案子怎么样 struct s { int b; double c; char a; }; 根据下面给出的逻辑,有一个: size = b[4 bytes] + padding[4 bytes] + c[8] + a[1] + padding[7 bytes to […]

使用结构将sizeof应用于不完整类型无效

我有一个结构,我把所有关于球员的信息。 那是我的结构: struct player{ int startingCapital; int currentCapital; int startingPosition; int currentPosition; int activePlayer; int canPlay; }; 这是我的主要内容: #include #include #include “header.h” int main(int argc, char *argv[]) { int s,i,numOfPlayers; struct player *players; printf(“Give the number of players: \n”); scanf(“%d”,&numOfPlayers); players = (struct player *)calloc(numOfPlayers,sizeof(struct player)); system(“PAUSE”); return 0; } 我要求用户给出玩家数量,然后我尝试分配所需的内存。 但我得到这个编译错误,我无法弄清楚: invalid application of […]

C Typedef – 不完整类型

所以,出乎意料的是,编译器决定吐面:“现场客户的类型不完整”。 这是代码的相关代码段: customer.c #include #include #include “customer.h” struct CustomerStruct; typedef struct CustomerStruct { char id[8]; char name[30]; char surname[30]; char address[100]; } Customer ; /* Functions that deal with this struct here */ customer.h customer.h的头文件 #include #include #ifndef CUSTOMER_H #define CUSTOMER_H typedef struct CustomerStruct Customer; /* Function prototypes here */ #endif 这是我的问题所在: customer_list.c #include #include […]

Swift:将未初始化的C结构传递给导入的C函数

我知道这个答案 ,但这不是一回事 – 那就是传递一个指针,用分配初始化。 我正在与具有以下结构定义的C库连接: typedef struct myStruct { unsigned char var [50]; } myStruct; 有一个函数可以传递结构的地址 – 通常基于堆栈而不是堆,因此: myStruct mine; initMyStruct(&mine); 这会初始化结构的内容 – 调用者不知道内存的内部格式,因此混淆。 在Swift中,我正在创建一个类,它将封装结构和与其上运行的其他C函数的接口。 class MyClass { var mine : myStruct init() { initMyStruct(&mine) // Error: Variable ‘self.msg’ passed by reference before being initialized } } 我不能为我的生活弄清楚如何初始化结构,或者如果可以替代使用一个点。 mine = myStruct() // Fails because you […]

如何使用指针指向C中的结构?

我想在双指针下改变结构的成员。 你知不知道怎么? 示例代码 typedef struct { int member; } Ttype; void changeMember(Ttype **foo) { //I don`t know how to do it //maybe *foo->member = 1; }

struct bitfield max size(C99,C ++)

位结构字段的最大位宽是多少? struct i { long long i:127;} 我可以在struct中定义一个位域,位域大小可以达到128位,或者是256位,还是更大? 有一些超宽的矢量类型,如sse2(128位),avx1 / avx2(256位),avx-512(下一个Xeon Phis为512位)寄存器; 以及gcc中的__int128等扩展名。