我很困惑何时将*
和&
放在函数调用上的函数参数和&符号上,特别是对指针感到困惑。我还想在初始化中进行动态分配,但它是否允许在集合中?我的理解是我的集合只是一个整数数组。我正在尝试创建一个具有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?
}
该程序应该像这样运行。编译完成后,将初始化第一个操作,为2组分配动态空间。然后将有限值插入给定的集合(传递)。然后显示给定集合内部的内容(已通过)。如果只有某人可以验证我的函数调用,函数参数,函数原型参数转换以及其他我做错的事情,我可以自己开始编写函数。致谢
答案 0 :(得分:0)
*是解引用运算符。使用它将为您提供指针变量指向的值/对象。
&amp;运算符将为您提供变量的地址。所以使用&amp;在指针上将给出指针变量的地址(不是指针值的地址)。
您的函数都接受指向SET(SET * A)类型结构的指针。你声明两个指向集合的指针(SET * A,SET * B)。所以你应该简单地调用没有*或&amp;的函数。参数中的运算符,例如initializeSet(A, B)
。
如果要访问函数中的指针值,则应使用* A.如果要访问指针值的地址,则应使用A.
但是,我不认为将SET定义为int将为您提供您正在寻找的功能(一组整数)。你必须要为每个可以保存INT变量的set元素和指向SET中下一个元素的指针创建一个struct。