咸鱼章一 发表于 2020-2-8 22:51:04

关于数组和指针在形参和实参中的用法

本帖最后由 咸鱼章一 于 2020-2-8 23:00 编辑

问题:求1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过函数返回这些数的个数。

以下是自己写的代码:

#include <stdio.h>

int count(int *a,int m)
{
        int n,cnt=0;
        for(n=1;n<=m;n++)
        {
                if(n%7==0||n%11==0)
                {
                        a=n;
                }
                printf("%d",cnt);
                return cnt;
        }
}

int main()
{
        int m,cnt,*a;
        printf("请输入一个正整数:");
        m=getchar();
        cnt=count(*a,m);
        printf("%d",cnt);
}

运行时,输入m的值后报错:The variable 'a' is being used without being initialized.

希望有大神能解释一下修改方法以及实参不能和形参一样用*a的原因。。

alexw_h264 发表于 2020-2-9 10:39:34

实参*a表示的是一块内存的指针(地址),所以在使用它之前,需要对它分配一块内存。函数传递参数时,指针参数不需要带*

#include <stdio.h>

int count(int *a,int m)
{
      int n,cnt=0;
      for(n=1;n<=m;n++)
      {
                if(n%7==0||n%11==0)
                {
                        a=n;
                                                printf("%d\n",n);
                }      
      }

      return cnt;
}

int main()
{
      int m,cnt,*a;

      printf("请输入一个正整数:");
      scanf("%d", &m);

                a = (int *)malloc(m*sizeof(int));
      cnt=count(a,m);
      printf("\n一共有%d个",cnt);

                free(a);

                return 0;
}
页: [1]
查看完整版本: 关于数组和指针在形参和实参中的用法