- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通过“Learning C the Hard way”来学习C,并做一些我自己的练习。我偶然发现了以下问题。
假设我有以下结构:
struct Person {
char name[MAX_INPUT];
int age;
}
在 main() 中,我声明了以下数组:
int main(int argc, char *argv[]) {
struct Person personList[MAX_SIZE];
return 0;
}
现在假设有 2 个函数(main 调用 function1,函数 1 又调用 function2),我想将一个人保存在我在 main 函数中声明的数组中,如下所示:
int function2(struct Person *list) {
struct Person *prsn = malloc(sizeof(struct Person));
assert(prsn != NULL); // Why is this line necessary?
// User input code goes here ...
// Now to save the Person created
strcpy(prsn->name, nameInput);
ctzn->age = ageInput;
list = prsn; // list was passed by reference by function1, does main need to pass the array by
// reference to function1 before?
// This is where I get lost:
// I want to increment the array's index, so next time this function is called and a
// new person needs to be saved, it is saved in the correct order in the array (next index)
}
因此,如果我返回主函数并想要打印其中保存的前三个人,如下所示:
...
int i = 0;
for(i = 0; i < 3; i++) {
printf("%s is %d old", personList[i].name, personList[i].age);
}
...
基本上,如何在应用程序中引用数组,同时保持其持久性。请记住,main 不一定直接调用使用数组的函数。我怀疑有人可能建议将其声明为全局变量,那么还有什么选择呢?双指针?双指针如何工作?
感谢您的宝贵时间。
最佳答案
这里有一些提示(没有双关语!)可以帮助您:
就目前情况而言,struct Person personList[MAX_SIZE];
行为 MAX_SIZE
个 Person
结构体分配内存。如果您正在做的事情,您实际上不需要使用 malloc
分配更多内存。
但是,您可以通过仅在真正需要人员时分配内存来节省一些内存。在这种情况下,您希望 personList
数组包含指向 Person
结构的指针,而不是结构本身(您使用 malloc 创建的结构)
)。
即:struct Person * personList[MAX_SIZE];
当您创建人员时:
struct Person * person = (struct Person *) malloc(sizeof(struct Person));
personList[index] = person;
当您使用人员列表时: printf("%s", personList[index]->name);
数组不会神奇地保存任何特殊索引的记录。你必须自己做这件事。一种方法是始终将数组的长度传递给每个需要它的函数。
void function1(struct Person * personList, int count);
如果您想在返回调用函数时修改计数变量,可以通过引用传递它:
void function1(struct Person * personList, int * count);
一种可能更稳健的方法是将计数和数组一起封装到另一个结构中。
struct PersonList { struct Person * list[MAX_SIZE];整数计数; }
通过这种方式,您可以编写一组始终连贯地处理列表数据的函数 - 每当您添加新人员时,您总是会增加计数,依此类推。
int addNewPerson(struct PersonList * personList, char * name, int age);
我想这么多应该对你有帮助。如果您想获得更详细的解释,请发表评论。
关于c - 引用一个数组。递增和保存索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12926910/
我正在实现一个算法,当用户输入字符串时,字符串中的每个字符(如果是字母表)都应该增加给定的值(这里是旋转器)。我正在玩这个代码 2 小时,但无法弄清楚为什么当我按值旋转器递增时,它会按 rotator
我有 1.0.5。我怎样才能增加到 1.0.6? 试过了,但是不行。 echo 1.0.5 0.0.1 | awk '{sum=$1+$2; printf"%0.2f\n", sum }' 最佳答案
这个问题在这里已经有了答案: Behaviour of increment and decrement operators in Python (11 个回答) Why are there no ++
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎偏离主题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或 include a mini
我正在尝试温习我的 C,我有以下代码,当我使用 i 偏移量但不使用 Hold++ 时,它可以工作,我不明白为什么我认为他们做了同样的事情?这是我无法开始工作的版本: char* reversestri
我需要增加/减少 PostgreSQL 数据库中的计时。 下面是包含列类型为"timestamp without time zone" 的表的输出 如果时间超过 24 小时,我也需要更改日期。请协助
我有一个名为 temp_rfm 的表,其中 col1 实际上是客户 ID(我有一个非法的联盟混合问题)和 calc_date 是增加月份的开始。 SELECT * FROM temp_rfm ; co
我目前正在处理我的应用程序的首选项,我必须设置一个角度。默认值约为 30°,用户应该能够调整此角度以使其最适合。 我不只是制作一个普通的 EditTextPreference,而是希望它可以像在其他应
这个问题已经有答案了: Increment a number by prefix and postfix operator (1 个回答) 已关闭去年。 我正在努力理解 Javascript 增量运算
我使用下面的 javascript 递归地重新加载一个目标 DIV,其 id="outPut",将参数传递给 getData.php 时执行数据查询的结果>。问题是 fadeTo 会淡化每次迭代调用返
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Jquery Draggable + Bring to Front 我有一个网站,用户可以在其中打开多个聊天
我必须定义一个函数,其中: Starting with a positive integer original, keep multiplying original by n and calculat
我正在我的应用程序中记录一些统计数据。其中一项统计数据是 BigDataStructure 的大小。我有两个选择: 创建一个计数器并递增/每次递减计数器有一个添加/删除大数据结构。 每次添加/删除从
在下面的 Java 示例程序中,我得到了无限循环,我不明白为什么: public class Time { public static int next(int v) { re
我从 C#/WPF 添加了一个意外的行为 private void ButtonUp_Click(object sender, RoutedEventArgs e) {
我想在 Python 2.7 中增加用户提供的字符串的最后一位数字。 我可以这样替换第一个数字: def increment_hostname(name): try: numb
我正在用蛮力搜索具有某些属性的 float (sin(a)^2+cos(a)^2-1 的小舍入误差)。因此,我想通过递增尾数来遍历给定 float 的邻域。 在 C 中是否有一种简单的方法可以做到这一
C 标准将 _Bool 定义为包含 0 或 1 的无符号类型。如果 _Bool 类型的值 1 递增,据我所知,有两个选项: 该值在 1 到 0 之间环绕 该值增加到 2,它是非零值,因此在转换回 _B
我有一个 INI 文件,其中存储了一些用于设置的整数。部分名称存储如下: [ColorScheme_2] name=Dark Purple Gradient BackgroundColor=224 B
我的应用程序中有这个方法: - (void)initializeTimer{ self.myTimer = [NSTimer scheduledTimerWithTimeInterval:th
我是一名优秀的程序员,十分优秀!