【发布时间】:2011-10-01 16:38:33
【问题描述】:
我没想到能够在结构的内存块中增加指向结构的指针。但它似乎工作。有没有这不起作用的情况?如果我创建一个结构“列表”,那么我应该总是能够增加指向它们的指针,C 会计算出要移动多少字节?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct User {
int id;
char name[32];
float net_worth;
};
typedef struct User User;
int main(int argc, char** argv) {
User* u1 = (User*)malloc(sizeof(User));
u1->id = 1;
strcpy(u1->name, "Mike");
u1->net_worth = 43.45;
User* u2 = (User*)malloc(sizeof(User));
u2->id = 2;
strcpy(u2->name, "Pablo");
u2->net_worth = -2.00;
User* u3 = (User*)malloc(sizeof(User));
u3->id = 3;
strcpy(u3->name, "Frederick");
u3->net_worth = 7329213.45;
User** users = (User**)malloc(sizeof(User)*10);
*users = u1;
printf("%s\n", ((User*)(*users))->name);
*users++;
*users = u2;
printf("%s\n", ((User*)(*users))->name);
*users++;
*users = u3;
printf("%s\n", ((User*)(*users))->name);
return 0;
}
【问题讨论】:
-
究竟是什么问题,你看它工作正常吗?
-
是的,我只是想确保我没有遗漏任何东西并且我理解它。
-
您使用表达式
*users++的任何特殊原因? '*' 是多余的(它只是取消引用++的结果)。这也令人困惑,因为您似乎试图增加*users,而不是users本身。 -
我实际上是要指出这一点,users++ 就足够了。
-
演员
((User*)(*users))也是多余的。users是User**;因此(*users)已经是User*。
标签: c memory pointers struct iteration