c - 循环后如何访问C中结构的第一个元素
问题描述
在 C 中,我使用 for 循环输入结构的元素并成功输入它们。然而,在循环输入之后,我想访问从一开始就使用 malloc 函数创建的所有元素以打印元素。使用循环创建结构元素后,如何从分配的内存的第一个元素循环?
#include <stdio.h>
#include <stdlib.h>
struct Ogrenci{
char isim[50];
char soyisim[50];
int numara;
float vizeNotu;
};
void main(){
struct Ogrenci *geciciOgrenci;
float ortalamaNot = 30;
int i;
char isim[50];
char soyisim[50];
int numara;
float vizeNot;
for(i=0; i<5; i++){
geciciOgrenci = malloc(sizeof(struct Ogrenci));
printf("Ismi girin: ");
scanf("%s",isim);
printf("Soyisim girin: ");
scanf("%s",soyisim);
strcpy(geciciOgrenci->isim,isim);
}
}
解决方案
您的代码分配内存,并将其地址存储在geciciOgrenci
. 这适用于第一个元素,但是从第二个元素开始,分配的新地址将覆盖前一个。进行以下更改。
#include <stdio.h>
#include <stdlib.h>
struct Ogrenci{
char isim[50];
char soyisim[50];
int numara;
float vizeNotu;
};
void main(){
struct Ogrenci *geciciOgrenci[5]; //declare array of pointers
float ortalamaNot = 30;
int i;
char isim[50];
char soyisim[50];
int numara;
float vizeNot;
for(i=0; i<5; i++){
geciciOgrenci[i] = malloc(sizeof(struct Ogrenci)); // store the address in the ith element
printf("Ismi girin: ");
scanf("%s",isim);
printf("Soyisim girin: ");
scanf("%s",soyisim);
strcpy(geciciOgrenci[i]->isim,isim); // refer to the ith element
}
for(i=0; i<5; i++){
printf("%s \n", geciciOgrenci[i]->isim); // access the elements
}
}
推荐阅读
- vuetify.js - vuetify v-data-table 忽略密集属性
- android - 导航架构组件:过渡动画不适用于对话框
- python - pip install python-pyaudio 在 Windows 上失败
- sql - 将日期列中的所有值更改为月末
- angular - 角补丁状态无限循环
- javascript - 属性值不会通过对象字面量定义应用
- coldfusion - 如何使用 cfscript 删除/删除远程 FTP 文件?
- excel - Excel 中用户定义的 IFS 函数的 VBA 代码
- doctrine - 实体字段ArrayCollection,学说在数据库中插入名称类
- python - 如何在python中将大代码点转换为unicode字符?