Tag: 数组

通过C中的函数操作动态数组

我正在学习如何在C中使用动态数组。我想要做的是创建动态数组data ,并使用函数test()将“1”放入第一个条目。 void test(void) { data[0] = 1; } int main(void) { int *data = malloc(4 * sizeof *data); test(); return 0; } 这在Visual Studio 2010中编译,但程序在运行时崩溃。 而不是使用test() ,使用data[0] = 1工作。 我的(新手)猜测是我需要将指向data的指针传递给函数test() 。 我该怎么写呢? 尝试 void test(int *data) { data[0] = 1; } 然后,在main使用test(data)而不仅仅是test() 。 编辑 尝试有效。 但是,这是一种“适当”的做法吗?

stdlib qsort对结构的指针数组进行排序

我试图根据存储在我知道的“桶”结构的void *中存储的值对结构的指针数组(下面的定义)进行排序。 它编译并打印出我的数组桶及其值,没有任何错误或警告,但实际上并没有对数组进行排序。 我使用asserts试图找到任何可能导致qsort错误的地方。 结构定义: typedef struct _bucket{ void* val; char *word; }bucket; typedef struct _root{ bucket **list; int hashTableLength; }root; 要传递给qsort函数的Sort函数: int sortFunc(const void *a, const void *b){ bucket *bucketA=(bucket*)a; bucket *bucketB=(bucket*)b; int bucketAVal = *((int*)bucketA->val); int bucketBVal = *((int*)bucketB->val); assert((bucketAVal&&bucketBVal)!=0); return bucketAVal-bucketBVal; } 对数组进行排序并打印: void sort(root* inRoot, int(*sortFunc)(const void *a, const void *b)){ […]

使用extern将数组与指针链接起来

假设我有两个文件:file1.c-包含一个名为“array [10]”的大小为10的int数组的全局定义。 file2.c-包含一个名为“extern int * array”的int指针,这里我试图将这个指针链接到数组。 但是当我检查file1.c中的数组地址和file2.c中的指针值时,它们都是不同的。 为什么会这样?

使用递归和无循环查找数组中最长的升序子系列的长度

我已经被困了好几个小时试图想象我怎样才能编写一个获取整数和整数数组的函数,并使用递归找到数组中最长的升序子系列的长度而根本没有循环。 我只允许使用另外一个递归函数,例如,对于以下数组:{45,1,21,3,3,6,53,9,18} outpot应该是5,因为最长的子系列是{ 1,3,6,9,18}。 所以,基本上,一个获取数组及其大小的函数,需要打印最长子系列的长度,根本不使用循环,没有全局/静态类型,它可能使用另一个“帮助”递归函数,那就是它。 这几乎就是我提出的所有内容,而且它一团糟,效果不佳。 我正在尝试扫描数组,同时我知道当前正在查看的索引,与当前比较的索引,以及从中启动当前子系列的originla索引。 我试图扫描arrays,同时知道应该比较的索引,但我卡住了,这是我得到的,我真的很感激任何提示和建议。 谢谢。 void max_set(int arr[], int size) { int bigSeries[2] = { 0 }; calcSeries(arr, bigSeries,0, 0, 1, size -1, 1); printf(“number of max parts going up %d \n”, bigSeries[0]); } void calcSeries(int arr[], int bigSeries[],int originalCHeckedIndex, int checkedIndex, int currentIndex, int lastIndex, int ascending) { if ((checkedIndex […]

Swig:将Java中的字节数组传递给C语言

我正在尝试使用Swig创建用于将byte []传递给C的Java实现。 痛饮: %include “typemaps.i” %apply(char *STRING, int LENGTH) { (char *buff, int len) }; %inline { typedef struct { char* buff; int len; } workit_t; } 在我生成的java类(workit_t.java)中,参数buff是String,而不是byte []。 Java的: public void setBuff(String value){ … } 我的swig定义中我做错了什么? 当我编写一个没有结构的简单swig定义时,我得到了所需的参数类型。 痛饮: %include “typemaps.i” %apply(char *STRING, int LENGTH) { (char *buff1, int *len1) }; Java的: public static void […]

程序的输出随printf()语句而变化

下面是一个C程序,用于找到给定数组中的平衡点。 #include void equilibrium(int a[], int n) { int i; int rsum[n], lsum[n]; lsum[0] = a[0]; rsum[0] = a[n-1]; for (i = 1 ; i < n ; i++) { lsum[i] = lsum[i-1]+a[i]; } printf("lsum array: "); for (i = 0 ; i = 0 ; i–) { rsum[i] = rsum[i + 1] + a[i]; […]

错误:可能无法初始化可变大小的对象

#define L 1 #define M L+1 int main(void){ int N=L*M*2; char s [N]={‘1′,’2’}; printf(“%d”, sizeof(s)); return 1; } 为什么上面的代码无法编译? Eclipse的编译器说了两件事: 可变大小的对象可能无法初始化:是因为在宏中使用M和L定义N还是因为我无法初始化类型为 arr [x]的数组,其中x在任何情况下都是可变的? 数组初始值设定项中的多余元素 – 这是什么意思?

C初始化数组数组

我有这个问题。 在运行某些函数之前,我需要存储一个float数组数组。 我怎么能实现这一点,因为我无法初始化一个非常数的数组? 我应该创建一个将使用malloc创建该数组的函数然后返回并分配给指针? typedef struct { float RGBA[4]; } graphColors; 我需要一个grapColors数组。 我很抱歉缺乏知识,我是一名Java程序员,现在需要与C合作。 编辑: graphColors *initializeGraphColors(){ graphColors *gp; int i; float HI = 1.0f; float LO = 0.0f; float temp[] = {1.0f, 1.0f, 1.0f, 0.0f}; gp = (graphColors *) malloc(nrOfLines * sizeof(graphColors)); for(i = 0;i < nrOfLines; i++){ gp[i].RGBA[0] = LO + (float)rand()/((float)RAND_MAX/(HI-LO)); gp[i].RGBA[1] = […]

使用双指针访问2D数组元素

最近我在C面试了一次。 面试官让我解释如何使用double pointer访问2D array特定元素。 我给出答案为*(*(a+i)+j) ,其中a是双指针, i是行数, j是列数。 后来他让我用一个例子来解释。 我对*(a+i)感到困惑,因为它给出了值而不是地址,并且添加到j给出了一些垃圾值。 任何人都可以解释。

将命令行参数复制到数组中

对于一个程序,我想使用malloc()通过命令行发送的参数的数组副本。 因此,例如,如果我执行./a.out一两三,我想要一个带有{a.out,one,two,3}的数组。 但是,我有一些问题让我的程序工作。 这就是我所拥有的: static char** duplicateArgv(int argc, char **argv) { char *array; int j = 0; // First allocate overall array with each element of char* array = malloc(sizeof(char*) * argc); int i; // For each element allocate the amount of space for the number of chars in each argument for(i = 1; i […]