可能已经提出了以下问题。此外,我意识到,有许多帖子讨论这一主题。然而,在搜索之后,我找不到那些具体问题的答案。
注意:问题出现在代码下面。
守则:
#include <stdio.h>
#define ARRAY_SIZE 3
typedef struct
{
const char* name;
const char* color;
int age;
}Cat;
void printCat1(Cat* cat)
{
printf("\n%s\n", cat->name);
printf("%s\n", cat->color);
printf("%d\n", cat->age);
printf("\n");
}
void printCat2(Cat cat)
{
printf("\n%s\n", cat.name);
printf("%s\n", cat.color);
printf("%d\n", cat.age);
printf("\n");
}
void printCatArray(Cat catArr[])
{
int i = 0;
for (i = 0; i < ARRAY_SIZE; i++)
{
//WHICH OPTION IS BETTER? (printCat1 OR printCat2)
//CALLING TO PRINTING FUNCTION.
}
}
void swap(_____ cat1, _____ cat2)
{
Cat temp = //cat1 or *cat1 ?
//cat1 = cat2 or *cat1 = *cat2?
cat2 = temp;
}
void sortbyage(Cat catarr[])
{
int i, j;
for (i = 0; i < ARRAY_SIZE - 1; i++)
for (j = 1; j < ARRAY_SIZE; j++)
if (catarr[i].age > catarr[j].age)
swap(______, ______]);
}
int main() {
Cat catArray[ARRAY_SIZE] =
{ {"cat1", "white", 1},
{"cat2", "black", 2},
{"cat3", "gray", 3} };
printCatArray(catArray);
return 0;
}
问题如下:
1。打印单个cat结构数据的两个函数之间有什么区别?
2。哪种打印功能更适合使用?为什么?如果你愿意解释的话,这将是非常重要和有意义的。
3。有什么更好写,为什么?空交换(猫cat1,猫cat2)或空交换(猫* cat1,猫* cat2)
4。从函数soryByAge (&catArri,&catArrj)调用交换函数,对吗?你能用不同的方式写吗?
5。下面的代码行是正确的: catArray2 = catArray1;很好地了解它的实际操作。
如果其中一个或多个问题不够清楚,我很乐意澄清。
非常感谢您事先!
发布于 2021-12-10 14:44:13
printCat1
使用指针,它的效率更高,因为它不会造成临时复制。
printCat2
传递值,它复制cat
,效率较低。
swap
函数必须使用指针。如果没有,它将简单地交换复制的值。原始数组将保持不变。
void swap(Cat *cat1, Cat* cat2)
{
Cat temp = *cat1;
*cat1 = *cat2;
*cat2 = temp;
}
将参数传递给swap
时,请使用变量的地址。例如,
swap(&arr[i], &arr[j]);
printCat1(&arr[i]);
结构:
typedef struct
{
const char* name;
const char* color;
int age;
}Cat;
...
Cat catArray[ARRAY_SIZE] =
{ {"cat1", "white", 1},
{"cat2", "black", 2},
{"cat3", "gray", 3} };
您希望将字符串声明为字符数组。
typedef struct
{ char name[50]; char color[50]; int age; }Cat;
或声明为指针并动态分配。
发布于 2021-12-10 16:00:32
const
。如果它们被定义为const
,您将无法更改它的运行时,例如从用户那里获取它或用数据库读取文件。foo(cat cats[])
和foo(cat *cats)
与作为指针传递的数组完全相同。传递大小也很好,因为在现实生活中,你不知道数组是大的。void swap(Cat cat1, Cat cat2)
或void swap(Cat* cat1, Cat* cat2)
-第一个将在结构的本地副本上工作。它不会影响原始数组。因此,只有第二个版本才会做些力所能及的事情。1
复制到索引2
的结构。之后,在索引1
和2
上将有相同的元素。typedef struct
{
char* name;
char* color;
int age;
}Cat;
void printCat1(const Cat* cat)
{
printf("\n%s\n", cat->name);
printf("%s\n", cat->color);
printf("%d\n", cat->age);
printf("\n");
}
void printCat2(Cat cat)
{
printf("\n%s\n", cat.name);
printf("%s\n", cat.color);
printf("%d\n", cat.age);
printf("\n");
}
void printCatArray(const Cat *catArr, size_t size)
{
for (size_t i = 0; i < size; i++)
{
printCat1(catArr + i);
/* or */
printCat2(catArr[i]); // in this case the whole structure will passed to the function
}
}
void swap(Cat *cat1, Cat *cat2)
{
Cat temp = *cat1;
*cat1 = *cat2;
*cat2 = temp;
}
void sortbyage(Cat *catarr, size_t size)
{
size_t i, j;
for (i = 0; i < size - 1; i++)
for (j = 1; j < size; j++)
if (catarr[i].age > catarr[j].age)
swap(catarr + i, catarr + j);
}
int main() {
Cat catArray[] =
{ {"cat1", "white", 1},
{"cat2", "black", 2},
{"cat3", "gray", 3} };
printCatArray(catArray, sizeof(catArray) / sizeof(catArray[0]));
}
https://stackoverflow.com/questions/70304587
复制相似问题