学习集:如何将星号和&符号放在函数参数和函数调用上?

时间:2015-06-16 17:58:21

标签: c set function-pointers function-call

我很困惑何时将*&放在函数调用上的函数参数和&符号上,特别是对指针感到困惑。我还想在初始化中进行动态分配,但它是否允许在集合中?我的理解是我的集合只是一个整数数组。我正在尝试创建一个具有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组分配动态空间。然后将有限值插入给定的集合(传递)。然后显示给定集合内部的内容(已通过)。如果只有某人可以验证我的函数调用,函数参数,函数原型参数转换以及其他我做错的事情,我可以自己开始编写函数。致谢

1 个答案:

答案 0 :(得分:0)

*是解引用运算符。使用它将为您提供指针变量指向的值/对象。

&amp;运算符将为您提供变量的地址。所以使用&amp;在指针上将给出指针变量的地址(不是指针值的地址)。

您的函数都接受指向SET(SET * A)类型结构的指针。你声明两个指向集合的指针(SET * A,SET * B)。所以你应该简单地调用没有*或&amp;的函数。参数中的运算符,例如initializeSet(A, B)

如果要访问函数中的指针值,则应使用* A.如果要访问指针值的地址,则应使用A.

但是,我不认为将SET定义为int将为您提供您正在寻找的功能(一组整数)。你必须要为每个可以保存INT变量的set元素和指向SET中下一个元素的指针创建一个struct。