【问题标题】:How to pass an integer pointer to a function?如何将整数指针传递给函数?
【发布时间】:2015-07-30 02:56:36
【问题描述】:

我在这里用 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);
}

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

【问题讨论】:

  • int a=10,b=20,c; sum(a,b,&amp;c); printf("sum is %d\n",c);
  • 它“编译得很好”....如果您忽略编译器发出的未初始化值警告。

标签: c function pointers


【解决方案1】:

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

#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 而不是 int *。然后,您可以使用运算符&amp; 的地址来获取相关数据的地址,然后将其作为函数参数传递。

【讨论】:

    【解决方案2】:

    上述程序中的问题是未初始化的指针c。所以你可以使用mallocc分配内存-

     #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;
     }
    

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多