我有一个数组,并希望将它传递给一个函数,该函数需要将指针数组作为参数,当我使用引用传递它时它只给出了该数组的第一个元素。我究竟做错了什么?这是我的代码:
#include <stdio.h>
#include <stdlib.h>
struct abc{
int a;
};
void a(struct abc* j[]){
printf("%d\n",j[1]->a);
}
int main()
{
struct abc* k = malloc(2 * sizeof(struct abc));
k[0].a = 2;
k[1].a = 3;
a(&k);
return 0;
}
提前致谢
答案 0 :(得分:3)
编辑:您当前没有创建指针数组。您当前正在创建一个结构数组。要创建指针数组,请执行以下操作:
#include <stdio.h>
#include <stdlib.h>
struct abc{
int a;
};
void a(struct abc* j[]){
printf("%d\n",j[1]->a);
}
int main()
{
struct abc **k = malloc(2 * sizeof(struct abc *));
k[0] = malloc(sizeof(struct abc));
k[1] = malloc(sizeof(struct abc));
k[0]->a = 2;
k[1]->a = 3;
a(k);
return 0;
}
旧:如果你想只使用一组结构:
#include <stdio.h>
#include <stdlib.h>
struct abc{
int a;
};
void a(struct abc* j){
printf("%d\n",j[1].a);
}
int main()
{
struct abc* k = malloc(2 * sizeof(struct abc));
k[0].a = 2;
k[1].a = 3;
a(k);
return 0;
}
答案 1 :(得分:1)
如果要传递数组。将指针传递给第一个元素和元素个数。
#include <stdio.h>
#include <stdlib.h>
struct abc{
int a;
};
void a(struct abc* j, int num){
int i;
for(i = 0; i < num; i++)
{
printf("element %d has a value %d\n", i, j[i].a);
}
}
int main()
{
struct abc* k = malloc(2 * sizeof(struct abc));
k[0].a = 2;
k[1].a = 3;
a(k, 2);
free(k);
return 0;
}
如果指针数组是你之后的
那么#include <stdio.h>
#include <stdlib.h>
struct abc{
int a;
};
void a(struct abc** j){
struct abc** tmp = j;
while(*tmp != NULL)
{
printf("value is %d\n", (*tmp)->a);
tmp++;
}
}
int main()
{
struct abc** k = malloc(3 * sizeof(struct abc*));
k[0] = malloc(sizeof(struct abc));
k[0]->a = 3;
k[1] = malloc(sizeof(struct abc));
k[1]->a = 2;
k[2] = NULL;
a(k);
free(k[0]);
free(k[1]);
free(k);
return 0;
}
答案 2 :(得分:0)
printf("%d\n",j[1]->a);
应为printf("%d\n",(*j)[1].a);
(*j)[1].a)
表示k[1].a
。 (j = &k
,(*j)[1].a)
==&gt; (*&k)[1].a
==&gt; (k)[1].a
)
注意:*j[1]
表示*(j[1])
。因此*j
必须括在括号中(例如(*j)
)。
struct abc* j[]
表示指向struct abc
的指针数组。
函数调用的情况为a(&k);
j
相当于只有一个k
的数组。 (如struct abc* j[] = { k };
)
所以j[1]
是指针无效的事实。
j[0]
表示k
因此以下内容有效。
printf("%d\n", j[0]->a);//2
printf("%d\n", (j[0]+1)->a);//3