需要帮助了解使用指针从 C 函数返回的数组的大小

问题描述 投票:0回答:1

我有一个 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 芯片的项目。

c pointers
1个回答
0
投票

无法仅从指向第一个成员的指针获取数组元素的数量。

sizeof(**users)
的计算结果为 48,因为表达式
**users
的类型为
struct User
并且是结构体的大小。

您需要一些外部方法来了解有多少元素。

© www.soinside.com 2019 - 2024. All rights reserved.