如何从该程序中获取每个元素的值

时间:2016-06-13 17:28:43

标签: c

在这个程序中,我被要求只使用void函数中的指针

#include <stdio.h>
#include "power.c"
#define SIZE 20
int count = 0;

void test(int  *n, int *o) {
    long long sum = 0, temp;
    int remainder, digits = 0;
    int i;
    int a[SIZE];
    temp = *n;
    while (temp != 0) {
        digits++;
        temp = temp/10;
    } 

    temp = *n;

    while (temp != 0) {
        remainder = temp%10;
        sum = sum + power(remainder, digits);
        temp = temp/10;
    }    

    if (*n == sum)
    { 
        count++;
        a[count] = *n;
    }
    o = a;
    for(i=1;i<=count;i++){
        printf("*******%i,%d\n",i,o[i]);
    }
}

这是测试台

#include <stdio.h>
#define SIZE 20 
int main () {
    int c, a, b;
    int *x;
    int *y;      
    int i;
    a = 2 ;
    b = 1000;
    //b = 345678910;
    for (c = a; c <= b; c++) {
         x = &c;
         test(x,y);     
    }
}

打印出类似

的内容

******* 1,2- ******* 2,3 ******* 12407

这些值是正确的但是我想在测试台上调用test之后打印y的每个元素,并期望这些值与上面的值类似,但我不知道该怎么做。我正在寻求你的帮助。

此致 贝

1 个答案:

答案 0 :(得分:0)

答案是,在调用test后,您无法打印值。原因是atest返回时超出范围。换句话说 - y根本没有指向有效的内存,任何访问它的尝试都可能导致程序崩溃。

您有以下问题:

1)ytest返回时指向无效内存(如上所述)

2)count不应是全球性的

3)count应该从零而不是一个

开始

那看起来:

// int count = 0; Don't make it global

void test(int  *n, int *o, int* cnt)
{
    ....
    int count = 0;
    int* a = malloc(SIZE * sizeof(int));
    ....

    if (*n == sum)
    { 
        a[count] = *n;  // Switch the two statements to index from zero
        count++;
    }
    o = a;
    *cnt = count;       // Return the value of count

    for(i=0;i<count;i++){  // Notice this change - start index from zero
        printf("*******%i,%d\n",i,o[i]);
    }
}

int main () {
    int count;
    ....

    test(x, y, &count);  // Pass a pointer to count

    // Now print y
    for(i=0; i<count; i++){
        printf("*******%d\n", y[i]);
    }
    free(y);  // Release memory when done with it

动态内存分配的替代方法是在main中声明数组:

int main () {
    int count;
    int y[SIZE];
    ....

    test(x, y, &count);  // Pass a pointer to count

    // Now print y
    for(i=0; i<count; i++){
        printf("*******%d\n", y[i]);
    }

并且在函数中直接使用y而不是变量a