如何将整数指针传递给函数?

时间:2015-07-30 02:56:37

标签: c function pointers

这里我在C中执行一个简单的代码。 它在运行时编译正常但陷阱。

#include <stdio.h>

#include <conio.h>

void sum(int x,int y,int *z)
{
    *z=x+y;
}

void main()
{
    int a=10,b=20,*c;

    sum(a,b,c);
    printf("sum is %d\n",*c);
}

有人可以指出问题是什么吗?另外,如何将指针传递给函数?

2 个答案:

答案 0 :(得分:9)

您的错误是您已将未初始化的整数指针传递给函数,然后使用指针。你可能想要做的是自动在堆栈上分配一个整数,然后将所述整数的地址传递给函数。

#include <stdio.h>
#include <conio.h>

void sum(int x,int y,int *z)
{
    *z=x+y;
}

void main()
{

    int a=10,b=20,c;  // Automatically allocate an integer on the stack

    sum(a,b,&c); // Third argument is the address of the integer
    printf("sum is %d\n",c);
}

关键是要记住,当你执行int *c时,你正在分配一个指针,当你执行int c时,你正在分配一个整数。如果您希望修改传递给函数的变量,C中的典型模式是传递所述变量的地址,但您首先需要分配正确的类型,在本例中为int而不是{{1 }}。然后,您可以使用运算符int *的地址来获取相关数据的地址,然后将其作为函数参数传递。

答案 1 :(得分:3)

上述程序中的问题是单位指针c。因此,您可以使用c -

将内存分配给malloc
 #include <stdio.h> 
 #include <stdlib.h>

 void sum(int x,int y,int *z)
  {
        *z=x+y;
  }

 int main()   // declare main as int.
 {

     int a=10,b=20,*c;
     c=malloc(sizeof(int));    //allocating memory to pointer c 
     sum(a,b,c);
     printf("sum is %d\n",*c);
     free(c);                  //  freeing allocated memory
     retrirn 0;
 }