Tag: 结构

使用指针交换结构

假设我们有如下结构: struct EMPLOYEE{ int EmpID; int Sal; } Stu[5]; 如果满足以下条件,我们希望交换这些结构: Stu[i].Sal < Stu[0].Sal 一种方法是通过交换整个结构。 像这样的东西: TempStu.Sal = Stu[i].Sal; Stu[i].Sal = Stu[0].Sal; Stu[0].Sal = TempStu.Sal; TempStu.EmpID = Stu[i].EmpID; Stu[i].EmpID = Stu[0].EmpID; Stu[0].EmpID = Temp.Stu.EmpID; 这使得它成为一种非常耗时的方法。 其他方法可能是使用指向EMPLOYEE结构的指针数组,然后只对这些指针进行排序。 我无法弄清楚如何做到这一点。 这是我做的一个开始.. EMPLOYEE *St[5]; for(int j=0; j<5; j++) { St[j] = &Stu[j]; } if(Stu[i].Sal < Stu[0].Sal) swap(St[i],St[0]); void swap(EMPLOYEE *A, […]

将C结构映射到XML元素

假设我有一个C或C ++结构,例如: struct ConfigurableElement { int ID; char* strName; long prop1; long prop2; … }; 我想将其加载/保存到以下XML元素: 这种映射可以简单地用Java / C#或任何其他语言完成,并且具有运行时reflection。 是否可以使用宏/模板技巧在C ++中以任何非繁琐的方式完成? 处理嵌套结构/联合的加分点。

一起添加结构的两个成员

typedef struct Int40 { // a dynamically allocated array to hold a 40 // digit integer, stored in reverse order int *digits; } Int40; 在main中我实现了这些函数,并且loadCryptoVariable和loadHwConfigVariable各自返回一个40位数值 Int40 *p; Int40 *q; Int40 *r; p = loadCryptoVariable(“cryptoVarFile”); q = loadHWConfigVariable(0); r = kw26Add( p, q); 但是,我无法弄清楚如何将两者加在一起..(旁注:我知道我不应该像那样使用malloc并使用更明确的方式来做它,但是,我只是想弄清楚此刻的补充) Int40 *kw26Add(Int40 *p, Int40 *q) { Int40 *result; result = malloc(300); result->digits […]

造成此错误的原因是:左侧需要的结构。 要么 。*?

typedef struct tsk{ int x; int n; }TSK; TSK trd[MAX]; main(){ while(life!=0){ randomize(); for(i=0;i<MAX;i++){ trd[i].n=rand()%40+10; if(trd[i].n45) trd[i].n=rand()%40+10; trd[i].x=25; } for(m=0;m<MAX;m++){ gotoxy(8,m);printf("%c%c",23,23); gotoxy(7,m);printf("%c",17); gotoxy(46,m);printf("%c%c",23,23); gotoxy(48,m);printf("%c",16); } for(j=0;j<MAX;j++){ if(life==0) break; gotoxy(1,1); insline(); gotoxy(trd[j].n,1); printf("%c",3); trd[j].x–; gotoxy(ply,25); printf("%c",1); gotoxy(1,26); delline(); score++; life=hit(trd,life,ply); gotoxy(57,25); printf("SCORE: %0.0f LIFE: %d",score,life); gotoxy(8,1);printf("%c%c",23,23); gotoxy(46,1);printf("%c%c",23,23); gotoxy(7,1);printf("%c",17); gotoxy(48,1);printf("%c",16); gotoxy(4,1);printf("%c",label[j]); delay(200); if(kbhit()){ key=getch(); key=toupper(key); if(key==27) life=0; […]

使用C 创建列表和结构数组

我目前正在开始使用C,所以我想我会尝试创建自己的自定义列表。 这是代码: #include struct list { char data[10]; struct list *n; }; void clist(struct list *a) { int j=(sizeof(a)/sizeof(a[0])); j–; for(int i=0; i<j-1; i++) { struct list *next=&a[i+1]; a[i].n=next; } } int main() { struct list first = {.data="one", .n=NULL}; struct list second = {.data="two", .n=NULL}; struct list third = {.data="three", .n=NULL}; struct list arr[] […]

将结构成员复制到数组

struct { char a[10]; char b[5]; char c[10]; } info; 如何将所有struct数据成员连接成一个单独的数组?

用于不透明结构的C typedef编码样式

所以我理解typedef对于只能由访问器函数操作的不透明结构是可接受的。 这是使用在访问器函数中自引用的opaque typedef结构的适当方法吗? typedef struct foo { struct foo *bar; int member; } foo1; foo1 * blah1 = (foo1*) malloc(…); blah1->bar->member = 999; 替代方案是这样的: typedef struct { struct foo* bar; int member; }foo; 所以当你做这样的事情时: foo * blah1 = (foo*) malloc(…); blah1->bar->member = 999; 你会收到这个错误: dereferencing pointer to incomplete type

结构和指针

我在将条目内存地址获取到结构的成员变量时遇到问题。 我试过两种方式,其中一种方法不能正常工作。 如果你们给我一些建议,那将是非常好的。 首先 ,我定义了一个名为BITMAP_HEADER的结构。 struct BITMAP_HEADER { WORD bfType ; DWORD bfSize ; WORD bfReserved1 ; WORD bfReserved2 ; DWORD bfOffBits ; } ; 其次 ,我定义并初始化了一些变量。 在阅读下一行之前,请先查看下面的代码。 如果你问我为什么我有一个字符指针,我需要访问整数bfSize的每个字节。 struct BITMAP_HEADER bitmap_header ; char* pSize = (char*)&bitmap_header.bfSize; 第三 ,我以两种不同的方式获得了bfSize的内存地址并打印了值 。 1. printf(“%X\n”, *pSize) ; 2. printf(“%X\n”, (unsigned char)*(((char*)&bitmap_header)+2)) ; (1)直接获取bitmap_header.bfSize的内存地址。 (2)得到一个存储器地址到结构BITMAP_HEADER并将指针移动到下一个2字节。 最后 ,结果如下。 2D F6 […]

C程序 – 在编译器中标记为未声明的结构

我正在尝试编写一个程序来收集有关文件的安全信息并将其转换为人类可读的信息。 但是,我在初始化结构指针时遇到问题: #include #include #pragma comment(lib, “advapi32.lib”) struct file_perms { char user_domain[2050]; unsigned long user_mask; }; static myfunc (){ PSECURITY_DESCRIPTOR pSD = NULL; PACL pDACL = NULL; char *file = “D:/code/test.c”; ACL_SIZE_INFORMATION aclSize; ULONG result = GetNamedSecurityInfo(file,SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pDACL, NULL, &pSD); if (ERROR_SUCCESS != result) { printf( “GetNamedSecurityInfo Error %u\n”, result ); } […]

C迭代结构数组

说我已经声明了一个结构 struct mystruct { char a[10]; double b; } struct mystruct array[20] = { {‘test1’,1.0}, {‘test2’,2.0} <—- I just want to declare 2 items first because I am going to add new ones later. }; int i; for( i=0; array[i].a != NULL ;i++){ …. <— so here I just want to display what is initialized […]