【发布时间】:2022-12-12 18:45:29
【问题描述】:
前言。
这是我在这里的第一个问题,很抱歉,如果它不符合标准格式或问题的措辞方式等。 我并不是不知道这可能已经在深处的某个地方得到了回答,但是我已经尽我所能进行了搜索,但我找不到任何足够相似的东西来帮助我理解我做错了什么。
我是 C 语言的新手,有编程经验,但我确实缺乏大量的基础知识。这将通过我尝试解释和描述问题来证明。我很欣赏反馈,但老实说,我对理解计算机科学定义的能力很低,所以我希望能理解应用示例而不是引用。提前感谢额外的麻烦!
好的,对于实际问题;
我试图在根本不使用 list() 的情况下创建一个列表,到目前为止,我已经到了想要确认我确实在做的地步。
- 创建一个函数,该函数返回一个结构,其中包含我想要的任意长度的列表/数组。
- 通过查看结构成员元素的内容是否为 arraytest.. 的内容来检查该函数是否执行了我希望它执行的操作。
标题包括以下内容
//header
typedef struct {
size_t length;
int elements[];
}list_t;
list_t *new_list(size_t length, int elements[]);
到目前为止的源文件(放弃包含/定义,因为它在这里真的不相关)
list_t *new_list(size_t length, int elements[])
{
list_t* newList = (list_t*)malloc(sizeof(list_t*) + sizeof(int) * length);
newList->length = length;
newList->elements[length - 1];
return newList;
}
int main()
{
int arraytest[] = {1, 2, 3, 4, 5};
int length = 6;
list_t* list = new_list(length, arraytest);
for(int i = 0; i < length; i++)
{
printf("The address of [%d] element : %p\n", i, &list->elements[i]);
printf("The value of [%d] element : %u\n", i, list->elements[i]);
printf("The pointer value of [%d] element : %p\n", i, list->elements[i]);
printf("No [] index iteration of [%d] element : %p\n", i, list->elements);
}
return 0;
}
从主要可以看出,我试图在精神上抓住我认为可能导致我“困惑”的不同事物。在这个..
我显然试图通过打印元素来确认我确实拥有我的数组,可通过索引访问。
通常,我以前在结构中完成过此操作,但始终使用预定义的大小并且从不通过函数指针返回(或与此相关的数组参数)。它大部分都很好,我没有遇到任何问题。
但是,我想我想在这里得到的是我本质上缺少的是什么?
我想到了一些事情;
-
要么我错过了 C 使用按值传递的事实,并且不知何故函数返回指针没有被这样对待,无论是在 main 中还是由函数 new_list 本身,我真的不知道。
-
我使用的语法不是我试图获得的确认的正确语法,我已经拥有了我想要的东西,但我遗漏了一些极其微不足道的东西。
-
函数 *new_list 是错误的,我没有返回我想返回的内容。
-
以上的任何组合,可能还有其他东西,或者完全是其他东西。
我已经尝试从打印件中查看它是否是一个取消引用的东西,但是由于我已经在使用数组,所以老实说我只是尝试添加一些不同的东西,因为我觉得数组和指针的区别不是100% 清晰。
例如,我知道,或者更确切地说,我认为我知道使用 * 作为指针与取消引用运算符之间的区别,获取 & 和 -> 的地址用于结构成员访问等等,我想这对我来说很清楚。但是我不能说老实说,一旦你在混合中加入数组,我就明白了。
无论如何,我要到此为止,我认为这说明了重点 (++)。
哦,程序执行并运行,我没有收到任何错误,只有一些关于格式化的编译器警告,我认为这不应该是真正的问题。
再一次感谢你的帮助 !
【问题讨论】:
-
作为声明,
newList->elements[length - 1];没有任何用处。它从数组的元素length - 1中获取值,然后丢弃该值。 -
另请注意,您永远不会初始化数组及其元素。数组中的所有元素都会有不定值。
-
malloc(sizeof(list_t*) + ...-->malloc(sizeof(list_t) + ...你不想要sizeof指针。 -
是的,您有一个灵活的数组成员,
malloc调用(一旦按照上面的@DavidRanieri 提到的那样修复)将为数组分配内存。但它会不是以任何方式初始化分配的内存。malloc本身只分配内存,不初始化内存。也没有显示代码可以做到这一点。您永远不会将内存设置为任何值,也永远不会分配给任何元素。 -
删除之前的评论;我明白你的意思了。。
标签: c