<分区>
编辑:
通过索引 pointer[i]
与通过指针递增 pointer+1
访问数组指针中的元素有什么区别。
人们将此问题标记为与此 question 重复
我很难理解怎么办?当然,这是一个关于数组和指针的问题,但问题的相似之处到此为止。当然,对 C99 的引用可能会帮助某人更深入地挖掘 C99.. 但是,为什么要使用 SO?
结束编辑
我有一个结构(比如已定义以便所有 C 文件都可以访问它)
typedef struct
{
uint8_t a;
uint8_t b;
} task_t;
在一个 C 文件(比如 Sub.c)中,我创建了一个这样的结构数组
task_t ossList[10] = {};
在运行时进一步填充 a
和 b
的值
在同一个 C 文件 (Sub.c) 中,我编写了一个函数,使其他 C 文件能够获取此结构数组。
void HLP_GetStruct(task_t ** ossListGet) {
*ossListGet = ossList;
}
我从其他文件(比如 Top.c)获取结构的方式是:
task_t * ossList;
HLP_GetStruct(&ossList);
for (k=0; k<nTasks; k++) {
printf("OssList %d %d", ossList[k].a, ossList[k].b)
}
一切都很好。但是当我仔细观察时,我想知道这到底是怎么回事。到底发生了什么?
在我的外部 C 文件 (Top.c) 中,我将 a 指针初始化为相同类型的结构。
task_t * ossList;
然后我将引用传递给另一个 C 文件 (Sub.c)
HLP_GetStruct(&ossList);
在那个 C 文件 (Sub.c) 中,我将我的指针指向“真正的”ossList 结构 array 并且我以某种方式得到了一个指针 array !?
void HLP_GetStruct(task_t ** ossListGet) {
*ossListGet = ossList;
}
我可以通过以下方式访问索引
for (k=0; k<nTasks; k++) {
printf("OssList %d %d", ossList[k].a, ossList[k].b)
}
如何?
(我以前从来没有这样做过,我的数组或多或少总是被声明为指针,默认情况下指针指向第一个元素,你可以“复制”指针等...)
子.c
task_t ossList[10] = {};
DoSomethingWithStructArray();
void HLP_GetStruct(task_t ** ossListGet) {
*ossListGet = ossList;
}
顶.c
task_t * ossList;
HLP_GetStruct(&ossList);
for (k=0; k<nTasks; k++) {
printf("OssList %d %d", ossList[k].a, ossList[k].b)
}