计算 c 中的问题(visual studio)

标签 c pointers

这是函数代码:

void statistics(int arr[], int n, int *positive, int *even, int *doubledigit)
{
    int i = 0, countP = 0, countE = 0, countD = 0;

    for(i = 0; i < n; i++)
    {
        if(arr[i] > 0)
            countP++;

        if((arr[i] % 2) == 0)
            countE++;

        if(abs(arr[i]) >= 10 && abs(arr[i]) < 100)
            countD++;
    }

    *positive = countP;
    *even = countE;
    *doubledigit = countD;
}

void main()
{
    //  double mat[size][size];
    int *positive = NULL, *even = NULL, *DoubleDigit = NULL;
    int arr4[] = {1, 3, 5, -45, 8, 8, 60, 800};
    int soa = sizeof(arr4);
    statistics(arr4, soa, &positive, &even, &DoubleDigit);
}

问题是偶数的结果是28:

为什么是28??它应该计算偶数... http://i.stack.imgur.com/dS2us.png

最佳答案

首先main()的返回类型应该是int

其次,出于某种原因,您将 int 指针(初始化为 NULL)的地址传递给您的函数。只需将 int* 参数传递给您的函数即可。

第三,sizeof 返回数组的大小(以字节为单位)。您想要遍历数组中元素的数量,而不是字节数。因此,您需要将字节数除以每个元素中的字节数 (sizeof(int))。

试试这个

int main()
{
  int positive =0, even = 0, DoubleDigit = 0;
  int arr4[] = { 1, 3, 5, -45, 8, 8, 60, 800 };
  int soa = sizeof(arr4)/sizeof(int);
  statistics(arr4, soa, &positive, &even, &DoubleDigit);
}

关于计算 c 中的问题(visual studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30004096/

相关文章:

c - Pcap 打开接口(interface)并注入(inject)数据包

c - C编程中堆栈溢出的含义

pointers - 符号链接(symbolic link)是指针吗? (或相反)

c++ - 如何在 PC/Visual C++ 上查明指针是否在堆栈上

c - 带有 void 数组指针参数的函数如何知道数组元素的大小?

c - 如何从指针获取字符串值

c - 通过在 C 中分配整数数组来理解这种行为

java - C 和 Java 中的链接列表

c++ - 使用 (void*) cast 打印字符串中字符的内存地址

pointers - 是否可以在 fortran 的类型构造函数中使用指针?