users
是一个用户对象的数组,而 sockfd
是数组的索引。users + sockfd
计算出的结果是指向 users
数组中某个用户对象的指针,也就是 &users[sockfd]
。这意味着 users + sockfd
是指向特定用户对象的指针。
演示 users + sockfd
和 &users[sockfd]
的效果
#include <iostream>
class User {
public:
User(int id) : id(id) {}
int get_id() const { return id; }
private:
int id;
};
int main() {
// 创建一个用户对象数组
User users[] = { User(1), User(2), User(3) };
// 使用索引访问
int sockfd = 1; // 假设我们想访问第二个用户
User* user_ptr1 = users + sockfd; // 计算指针偏移量
User* user_ptr2 = &users[sockfd]; // 直接取地址
// 输出用户ID以验证结果
std::cout << "User ID from users + sockfd: " << user_ptr1->get_id() << std::endl;
std::cout << "User ID from &users[sockfd]: " << user_ptr2->get_id() << std::endl;
return 0;
}
输出结果:
User ID from users + sockfd: 2
User ID from &users[sockfd]: 2
说明:
users
是一个User
对象数组。sockfd
是索引值(例如1
),我们用它来访问数组中的元素。users + sockfd
和&users[sockfd]
都得到指向数组中对应用户对象的指针。- 运行程序会输出相同的用户ID,验证两者的等效性。