设置指针数组
Setting array of pointers
我正在做一个小练习,将指针数组(双指针)加载到结构。我在头文件中有如下定义:
#include <stdio.h>
#define LEN (5)
typedef struct sample_s {
int num;
char *name;
}sample_t;
typedef struct new_sample_s {
char *string;
sample_t **sample_arr;
}new_sample_t;
sample_t table[LEN] = {
{0, "eel"},
{1, "salmon"},
{2, "cod"},
{3, "tuna"},
{4, "catfish"}
};
并使用此 .c 文件中的定义:
#include "test.h"
void print_new_sample_array(sample_t **sample_arr) {
int len = sizeof(table)/sizeof(new_sample_t);
for(int i = 0; i < len; i++){
printf("The array element is: %s\n", sample_arr[i]->name);
}
}
int main() {
new_sample_t new_sample;
new_sample.sample_arr = table;
print_new_sample_array(new_sample.sample_arr);
return 0;
}
我有两个问题:
首先,我不确定如何将 table
正确加载到 new_sample.sample_arr
此处的错误消息:
test.c: In function ‘main’:
test.c:13:27: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
new_sample.sample_arr = table;
^
其次,我不确定如何引用 sample_arr
中每个元素的属性。例如,当我执行以下操作时,程序出错:
for(int i = 0; i < LEN; i++){
printf("This is the elem in the array: %s", new_sample[i]->name);
}
我想了解更多关于双指针的概念以及我做错的原因。我真的很感激答案将 sample_arr
保持为双指针
谢谢!
在这个赋值语句中
new_sample.sample_arr = table;
右操作数(在数组隐式转换为指向其第一个元素的指针之后)具有类型 sample_t *
,而左操作数由于数据成员的声明而具有类型 sample_t **
sample_t **sample_arr;
没有从类型 sample_t *
到类型 sample_t **
的隐式转换。所以编译器发出了一条消息。
你应该像这样声明数据成员
sample_t *sample_arr;
相应的函数声明看起来像
void print_new_sample_array(sample_t *sample_arr);
在函数中 printf
的调用看起来像
printf("The array element is: %s\n", sample_arr[i].name);
我正在做一个小练习,将指针数组(双指针)加载到结构。我在头文件中有如下定义:
#include <stdio.h>
#define LEN (5)
typedef struct sample_s {
int num;
char *name;
}sample_t;
typedef struct new_sample_s {
char *string;
sample_t **sample_arr;
}new_sample_t;
sample_t table[LEN] = {
{0, "eel"},
{1, "salmon"},
{2, "cod"},
{3, "tuna"},
{4, "catfish"}
};
并使用此 .c 文件中的定义:
#include "test.h"
void print_new_sample_array(sample_t **sample_arr) {
int len = sizeof(table)/sizeof(new_sample_t);
for(int i = 0; i < len; i++){
printf("The array element is: %s\n", sample_arr[i]->name);
}
}
int main() {
new_sample_t new_sample;
new_sample.sample_arr = table;
print_new_sample_array(new_sample.sample_arr);
return 0;
}
我有两个问题:
首先,我不确定如何将 table
正确加载到 new_sample.sample_arr
此处的错误消息:
test.c: In function ‘main’:
test.c:13:27: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
new_sample.sample_arr = table;
^
其次,我不确定如何引用 sample_arr
中每个元素的属性。例如,当我执行以下操作时,程序出错:
for(int i = 0; i < LEN; i++){
printf("This is the elem in the array: %s", new_sample[i]->name);
}
我想了解更多关于双指针的概念以及我做错的原因。我真的很感激答案将 sample_arr
保持为双指针
谢谢!
在这个赋值语句中
new_sample.sample_arr = table;
右操作数(在数组隐式转换为指向其第一个元素的指针之后)具有类型 sample_t *
,而左操作数由于数据成员的声明而具有类型 sample_t **
sample_t **sample_arr;
没有从类型 sample_t *
到类型 sample_t **
的隐式转换。所以编译器发出了一条消息。
你应该像这样声明数据成员
sample_t *sample_arr;
相应的函数声明看起来像
void print_new_sample_array(sample_t *sample_arr);
在函数中 printf
的调用看起来像
printf("The array element is: %s\n", sample_arr[i].name);