【问题标题】:How to reassign a parameter? [duplicate]如何重新分配参数? [复制]
【发布时间】:2020-06-18 09:24:03
【问题描述】:

我想知道如何重新分配参数。更具体地说,在test() 中,我想重新分配p。它目前是一个死变量。

#include <stdio.h>

#define NULL 0

struct PayloadPtr {
    int prime;
    struct PayloadPtr *next;
};

typedef struct PayloadPtr *Payload;

Payload new_payload(int prime, Payload next) {
    Payload p = (Payload) malloc(sizeof(struct PayloadPtr));
    p->prime = prime;
    p->next = next;
    return p;
}

void test(Payload p, int n) {
    if (p->prime * (n / p->prime) == n) {

    } else if (p->next == NULL) {
        printf("%d\n", n);

        // HERE! p is a dead variable, how to re-assign the argument?
        p = new_payload(n, p);
    } else {
        test(p->next, n);
    }
}

int main() {
    Payload p = new_payload(2, NULL);

    printf("%d\n", 2);

    int i;
    for (i = 2; i < 11; i++) {
        test(p, i);
    }

    return 0;
}

【问题讨论】:

  • 已经p = new_payload(n, p); 重新分配了它,但新值未使用。你的意思是如何将新值传回给调用者?

标签: c


【解决方案1】:
void test(Payload *p, int n) {
    if ((*p)->prime * (n / (*p)->prime) == n) {

    } else if ((*p)->next == NULL) {
        printf("%d\n", n);

         *p = new_payload(n, *p);
    } else {
        test(&((*p)->next), n);
    }
}

int main() {
    Payload pHead = new_payload(2, NULL);

    printf("%d\n", 2);

    int i;
    for (i = 2; i < 11; i++) {
        test(&pHead, i);
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多