我有一个 struct User 定义为:
struct User {
char user_name[20];
char password[20];
int permissions;
int index;
};
然后定义一个 User 结构数组,以及一个返回该数组的函数:
static struct User * users_storage[MAX_USERS];
struct User** getUsers() {
return users_storage;
}
我想确定数组的大小,以便可以循环数组以访问各个 User 结构中的值。我可以使用
MAX_USERS
,但我需要使用 sizeof
(或其他方法)来完成此操作,因为调用 getUsers
的函数无法访问 MAX_USERS
。
struct User** users = getUsers();
for (int i = 0; i <= sizeof(**users)/sizeof(*users); i++) {
//for (int i = 0; i < MAX_USERS; i++) {
if (users[i]->user_name != NULL) {
printf("user_name=%s, index=%i\n", users[i]->user_name, users[i]->index);
}
}
目前数组中有 7 个 User 结构体。无论用户数量 (5,6,7) 如何,
Sizeof(*users)
都会返回 8,sizeof(**users)
都会返回 48。我认为它会是 56 (例如 8 * User 结构体的数量)?指针带动我喝酒!
注意:这不是课堂作业。我正在自学 C,因为我正在做一个使用 ESP32S3 芯片的项目。
无法仅从指向第一个成员的指针获取数组元素的数量。
sizeof(**users)
的计算结果为 48,因为表达式 **users
的类型为 struct User
并且是结构体的大小。
您需要一些外部方法来了解有多少元素。