学习集:如何在函数参数和函数调用上放置星号和符号?
Learning Sets : How do I place the asterisks and ampersands on function arguments and function calls?
我很困惑何时将 *
和 &
放在函数参数和函数调用的符号上,尤其是在指针上。我也想在初始化中进行动态分配,但它是否允许在集合中使用?我的理解是我的集合只是一个整数数组。我正在尝试创建一个包含 2 个 SETS 的程序。这些集合将存储值并可以显示。
这是我的新手代码:
#include<stdio.h>
#include<conio.h>
#define MAX 5
typedef int SET;
void initializeSet(SET *A, SET *B);
void insertElem(SET *C);
void displayElem(SET *C);
int main()
{
SET *A, *B;
int choice,ins,dis;
do{
printf("\n\nOperation:");
scanf("%d", &choice);
fflush(stdin);
switch(choice){
case 1:
initializeSet(A, B);
break;
case 2:
printf("\nWhich SET would you like to insert? (A or B):\n");
ins = getchar();
fflush(stdin);
toupper(ins);
if(ins == 'A'){
insertElem(A);
break;
}
else if(ins == 'B')
insertElem(B);
else
printf("\nWrong input!");
break;
case 3:
printf("\nWhich SET would you like to display? (A or B):\n");
dis = getchar();
fflush(stdin);
toupper(dis);
if(dis == 'A'){
displayElem(A);
break;
}
else if(dis == 'B')
displayElem(B);
break;
case 4:
exit(0);
default :
printf("\nInvalid input. Please try again.\n");
break;
}
}while(choice!=4)
getch();
return 0;
}
void initializeSet(SET *A, SET *B)
{
// how do I access it here?
}
void insertElem(SET *C)
{
//how do I assign values here?
}
void displayElem(SET *C)
{
//by displaying..does it really require pass by address or is by reference enough?
}
程序应该是这样的 运行。编译后,第一个操作将被初始化以将动态 space 分配给 2 个集合。然后将有限值插入给定的集合(通过)。然后显示给定集合中的内容(通过)。如果有人能验证我的函数调用、函数参数、函数原型参数转换和其他我做错的事情,我就可以开始自己编写函数了。谢谢
* 是取消引用运算符。使用它将为您提供指针变量指向的 value/object。
& 运算符将为您提供变量的地址。所以在指针上使用 & 会给你指针变量的地址(不是指针值的地址)。
您的函数都采用指向 SET (SET *A) 类型结构的指针作为参数。您声明了两个指向集合的指针 (SET *A, SET *B)。因此,您应该简单地在参数中不带 * 或 & 运算符的情况下调用该函数,例如initializeSet(A, B)
.
如果你想在函数内访问指针的值,你应该使用*A。如果你想访问指针值的地址,你应该使用 A.
但是,我认为将 SET 定义为 int 不会为您提供所需的功能(一组 int)。您将不得不为每个 set 元素创建一个结构,该结构可以包含一个 INT 变量和一个指向 SET 中下一个元素的指针。
我很困惑何时将 *
和 &
放在函数参数和函数调用的符号上,尤其是在指针上。我也想在初始化中进行动态分配,但它是否允许在集合中使用?我的理解是我的集合只是一个整数数组。我正在尝试创建一个包含 2 个 SETS 的程序。这些集合将存储值并可以显示。
这是我的新手代码:
#include<stdio.h>
#include<conio.h>
#define MAX 5
typedef int SET;
void initializeSet(SET *A, SET *B);
void insertElem(SET *C);
void displayElem(SET *C);
int main()
{
SET *A, *B;
int choice,ins,dis;
do{
printf("\n\nOperation:");
scanf("%d", &choice);
fflush(stdin);
switch(choice){
case 1:
initializeSet(A, B);
break;
case 2:
printf("\nWhich SET would you like to insert? (A or B):\n");
ins = getchar();
fflush(stdin);
toupper(ins);
if(ins == 'A'){
insertElem(A);
break;
}
else if(ins == 'B')
insertElem(B);
else
printf("\nWrong input!");
break;
case 3:
printf("\nWhich SET would you like to display? (A or B):\n");
dis = getchar();
fflush(stdin);
toupper(dis);
if(dis == 'A'){
displayElem(A);
break;
}
else if(dis == 'B')
displayElem(B);
break;
case 4:
exit(0);
default :
printf("\nInvalid input. Please try again.\n");
break;
}
}while(choice!=4)
getch();
return 0;
}
void initializeSet(SET *A, SET *B)
{
// how do I access it here?
}
void insertElem(SET *C)
{
//how do I assign values here?
}
void displayElem(SET *C)
{
//by displaying..does it really require pass by address or is by reference enough?
}
程序应该是这样的 运行。编译后,第一个操作将被初始化以将动态 space 分配给 2 个集合。然后将有限值插入给定的集合(通过)。然后显示给定集合中的内容(通过)。如果有人能验证我的函数调用、函数参数、函数原型参数转换和其他我做错的事情,我就可以开始自己编写函数了。谢谢
* 是取消引用运算符。使用它将为您提供指针变量指向的 value/object。
& 运算符将为您提供变量的地址。所以在指针上使用 & 会给你指针变量的地址(不是指针值的地址)。
您的函数都采用指向 SET (SET *A) 类型结构的指针作为参数。您声明了两个指向集合的指针 (SET *A, SET *B)。因此,您应该简单地在参数中不带 * 或 & 运算符的情况下调用该函数,例如initializeSet(A, B)
.
如果你想在函数内访问指针的值,你应该使用*A。如果你想访问指针值的地址,你应该使用 A.
但是,我认为将 SET 定义为 int 不会为您提供所需的功能(一组 int)。您将不得不为每个 set 元素创建一个结构,该结构可以包含一个 INT 变量和一个指向 SET 中下一个元素的指针。