如何在结构中交换数组的结构元素 - C
How to swap struct elements of array inside a struct - C
我有 2 个结构
typedef struct {
int i;
int p;
} item;
typedef struct {
item items[10];
} buffer;
void swap (item** p1, item** p2) {
item* temp = *p1;
*p1 = *p2;
*p2 = temp;
}
我正在尝试呼叫
item *ps = &buffer.items[0];
item *p = &buffer.items[1];
swap(&ps, &p);
但它不是交换它们?我究竟做错了什么?谢谢
如果 struct buffer 在 main 或 global 中是局部的,会有什么变化吗?
谢谢
您可以交换指针但不能交换结构!
item item0, item1, item2, item3, item4, item5, item6, item7, item8, item9;
typedef struct {
item * items[10] = { &item0, &item1, &item2, &item3, &item4, &item5, &item6, &item7, &item8, &item9 };
} buffer;
item **ps = &(buffer.items[0]);
item **p = &(buffer.items[1]);
swap(ps, p);
您的函数只交换 指针 ps
和 p
,而不交换它们指向的实际结构。为此,您需要复制结构,例如
void swap (item* p1, item* p2) {
item temp = *p1;
*p1 = *p2;
*p2 = temp;
}
调用为
swap(&buffer.items[0], &buffer.items[1]);
我使用了一个结构数组并将它们与临时文件交换
#include<stdio.h>
#include<stddef.h>
#include<string.h>
typedef struct Ville{
char name[25];
long population;
}Ville;
Ville classerVille(Ville *p_list,int index);
int main(){
Ville city_ranking[15];
int number_of_city=0;
strcpy(city_ranking[0].name,"Metz");
city_ranking[0].population=11890;
number_of_city++;
strcpy(city_ranking[1].name,"Nevers");
city_ranking[1].population=33325;
number_of_city++;
strcpy(city_ranking[2].name,"Paris");
city_ranking[2].population=2190327;
number_of_city++;
strcpy(city_ranking[3].name,"Reims");
city_ranking[3].population=183113;
number_of_city++;
strcpy(city_ranking[4].name,"Lyon");
city_ranking[4].population=515695;
number_of_city++;
classerVille(city_ranking,number_of_city);
return 0;
}
Ville classerVille(Ville *p_list,int index){
Ville temp;
for(int i=0;i<index;i++){
for(int j=i;j<index;j++){
if(p_list[i].population>p_list[j].population){
temp=p_list[i];
p_list[i]=p_list[j];
p_list[j]=temp;
}
}
}
return *p_list;
}
我有 2 个结构
typedef struct {
int i;
int p;
} item;
typedef struct {
item items[10];
} buffer;
void swap (item** p1, item** p2) {
item* temp = *p1;
*p1 = *p2;
*p2 = temp;
}
我正在尝试呼叫
item *ps = &buffer.items[0];
item *p = &buffer.items[1];
swap(&ps, &p);
但它不是交换它们?我究竟做错了什么?谢谢 如果 struct buffer 在 main 或 global 中是局部的,会有什么变化吗?
谢谢
您可以交换指针但不能交换结构!
item item0, item1, item2, item3, item4, item5, item6, item7, item8, item9;
typedef struct {
item * items[10] = { &item0, &item1, &item2, &item3, &item4, &item5, &item6, &item7, &item8, &item9 };
} buffer;
item **ps = &(buffer.items[0]);
item **p = &(buffer.items[1]);
swap(ps, p);
您的函数只交换 指针 ps
和 p
,而不交换它们指向的实际结构。为此,您需要复制结构,例如
void swap (item* p1, item* p2) {
item temp = *p1;
*p1 = *p2;
*p2 = temp;
}
调用为
swap(&buffer.items[0], &buffer.items[1]);
我使用了一个结构数组并将它们与临时文件交换
#include<stdio.h>
#include<stddef.h>
#include<string.h>
typedef struct Ville{
char name[25];
long population;
}Ville;
Ville classerVille(Ville *p_list,int index);
int main(){
Ville city_ranking[15];
int number_of_city=0;
strcpy(city_ranking[0].name,"Metz");
city_ranking[0].population=11890;
number_of_city++;
strcpy(city_ranking[1].name,"Nevers");
city_ranking[1].population=33325;
number_of_city++;
strcpy(city_ranking[2].name,"Paris");
city_ranking[2].population=2190327;
number_of_city++;
strcpy(city_ranking[3].name,"Reims");
city_ranking[3].population=183113;
number_of_city++;
strcpy(city_ranking[4].name,"Lyon");
city_ranking[4].population=515695;
number_of_city++;
classerVille(city_ranking,number_of_city);
return 0;
}
Ville classerVille(Ville *p_list,int index){
Ville temp;
for(int i=0;i<index;i++){
for(int j=i;j<index;j++){
if(p_list[i].population>p_list[j].population){
temp=p_list[i];
p_list[i]=p_list[j];
p_list[j]=temp;
}
}
}
return *p_list;
}