Tag: 动态数组

C程序,指针参数不会保存值

嗨伙计们,我很抱歉打扰你,但我开始在这里松开它..我最近再次开始用C编程,我遇到了一些我无法弄清楚的错误..我的C程序是(应该)是一个简单的程序,因此它需要执行以下操作:从键盘读取未定义数量的自然元素,直到读取0。 之后,它必须计算所有元素的乘积,并在该结果的末尾计算0-s的数量。 int input(int* v) { int n = 0; do { n = n + 1; v = (int*) realloc(v,n*sizeof(int)); printf(“Enter number %d: “,n); scanf(“%d”,&v[n-1]); } while(v[n-1] != 0); n–; return n; } int tZeros(int* v, int eNb) { int i; int val = 1; for(i = 0; i 0) { int zeros = […]

制作一个接受C中任何类型的动态数组

我正在尝试找到一种方法来构建一个结构来保存一个可以处理任何数据类型的动态数组(包括用户定义的数据类型),到目前为止,这就是我想到的。 #define Vector(DATATYPE) struct { DATATYPE* data; size_t size; size_t used; } typedef Vector(int) int_Vector; int main(int argc, char* argv[]){ int_Vector vec; return 0; } 虽然这很有效但我很想知道,这是一个好习惯吗? 我应该做这样的事情还是有更好的方法? 还有一种方法可以用typedef Vector(int) int_vector部分来实现它。 基本上这种方式可以让我使用数组,就像c ++使用模板一样,它看起来像这样: #define Vector(DATATYPE) struct { DATATYPE* data; size_t size; size_t used; } int main(int argc, char* argv[]){ Vector(int) vec; return 0; } 主要是为了避免这么多的typedef并将它们全部放在一个名字下面。

C中的Arraylist无法正常工作

我目前正在编写一个程序来实现C语言中的arraylist(或动态数组)…我认为我已经完成了70-80%,但是,我发现我的代码在测试时遇到了严重的问题。机器 简而言之,我将一组字符串(char *)插入到我的arraylist中,并试图在操作几次后显示它们。 但是,这就是我得到的: CHECK: 1 CHECK: 2 CHECK: ܗ¿èۗ¿ CHECK: EàEàHAÿE؉Ⱥ CHECK: 5 CHECK: 6 不幸的是,即使我已经两次检查了我的代码,我仍然无法弄清楚代码中的问题所在。 arraylist.h #ifndef _ARRAYLIST_H #define _ARRAYLIST_H #include typedef char* value_type; struct arraylist { int size; value_type* data; }; extern void arraylist_initial(struct arraylist *list); extern int arraylist_get_size(const struct arraylist list); extern value_type* arraylist_get_data_collection(const struct arraylist list); extern void arraylist_set_data_collection(struct arraylist […]

动态分配2维数组

我试图通过动态分配来构建二维数组。 我的问题是它的第一个维度可能需要100个值,那么第二个维度会根据我的问题采用可变数量的值吗? 如果有可能那么我将如何访问它? 我怎么知道第二维的边界?

C qsort()具有动态n乘2多维数组

首先,我定义了一个包含2列和10行的动态数组。 例如,这里整数设置为10。 int** array; int number = 10; array = malloc(number * sizeof(int*)); for (i = 0; i < number; i++) array[i] = malloc(2 * sizeof(int)); 然后我尝试使用qsort() 。 qsort( array, number, sizeof array[0], compare ); 这是我的比较function。 它按第一列中的整数值排序,然后按第二列排序,同时保留第一列中的顺序。 例如,“0 2,17,0 1”将变为“0 1,0 2,1 7”。 int compare ( const void *pa, const void *pb ) { int […]

动态分配数组解释

这是我的老师向我们展示的示例代码“如何在C中动态分配数组?”。 但我不完全理解这一点。 这是代码: int k; int** test; printf(“Enter a value for k: “); scanf(“%d”, &k); test = (int **)malloc(k * sizeof(int*)); for (i = 0; i < k; i++) { test[i] = (int*)malloc(k * sizeof(int)); //Initialize all the values } 我想在C中,要定义一个数组,你必须把[]放在名字之后,那么究竟是什么是int** test ; 它不仅仅是一个指针指针吗? 而malloc()行也让我感到困惑…..