gpt4 book ai didi

c - 指针歧义

转载 作者:太空宇宙 更新时间:2023-11-04 05:36:36 25 4
gpt4 key购买 nike

我正在尝试通过引用一个函数来传递一个数组,在这个函数中,数据将从预定义的值列表中添加到它。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ARR_SIZE 7

char* names[ARR_SIZE]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim", "Harriet"};
int ages[ARR_SIZE]= {22, 24, 106, 6, 18, 32, 24};

typedef struct {
char* name;
int age;
} person;

static void insert(person*, char*, int);

int main(int argc, char* argv[]) {

person* people = (person*) malloc(ARR_SIZE * sizeof(person));

for (int i = 0; i < ARR_SIZE; ++i) {
insert(&people[i], names[i], ages[i]);
}

for (int i = 0; i < ARR_SIZE; ++i) {
printf("Person #%d: (Name: %s; Age: %d)\n", i + 1, people->name, people->age);
}

return 0;
}

static void insert(person* next, char* name, int age) {
next->name = name;
next->age = age;
}

但是,当我运行这段代码时,我得到的数组中填充了第 1 个人和第 1 个年龄。

Person #1: (Name: Simon; Age: 22)
Person #2: (Name: Simon; Age: 22)
Person #3: (Name: Simon; Age: 22)
Person #4: (Name: Simon; Age: 22)
Person #5: (Name: Simon; Age: 22)
Person #6: (Name: Simon; Age: 22)
Person #7: (Name: Simon; Age: 22)

我尝试了一种不同的方法,通过调用 insert(&people, i, names[i], ages[i]); 并将方法签名修改为 void insert(person* * next, int position, char* name, int age);.当然,我也修改了方法中的代码,但这不是重点。编译成功了,但是,就像以前的方法一样,我在整个数组中只得到一个人和一个年龄。这一次,不是第一个,而是最后一个!

我对此一头雾水。我真的以为我对指针的工作原理有一个大致的了解,但这只是证明我错了。如果能就此主题提供任何形式的帮助,我将不胜感激。

提前谢谢你。

最佳答案

您的打印循环总是将相同的值传递给 printf。你想打印 people[i].namepeople[i].age

关于c - 指针歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com