如何将
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;
}
在
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
当你使用完这个动态分配的内存。