如何将指针传递给函数?

问题描述 投票:0回答:1

如何将

p[0]
传递给函数并打印其内容?

#include "stdio.h"
    
void setupMidiOctave(int *p[]) {
    int a[] = {1, 2, 3};
    int b[] = {4, 5, 6};

    p[0]    = &a[0];
    p[1]    = &b[0];
}

void prt(int *a) {
    printf("%d\n", a[1]);
}

int main(void) {
    int *p[2];
    setupMidiOctave(p);
    printf("%d\n", p[0][0]);
    prt(p[0]); // <--------- not printing out
    return 0;
}
c pointers
1个回答
0
投票

setupMidiOctave
中,您尝试将指针返回到声明有自动存储持续时间的两个数组中。一旦函数调用完成,这些指针就不再指向有效的内存。尝试使用它们会引发未定义的行为。

为了在您的情况下克服这个问题,需要动态分配

a
b
,以便它们比函数调用更长久。

void setupMidiOctave(int *p[]) {
    int *a = malloc(sizeof(*a) * 3);
    int *b = malloc(sizeof(*b) * 3);

    a[0] = 1; a[1] = 2; a[2] = 3;
    b[0] = 4; b[1] = 5; b[2] = 6;

    p[0] = a;
    p[1] = b;
}

但是现在不要忘记

free
当你使用完这个动态分配的内存。

© www.soinside.com 2019 - 2024. All rights reserved.