Tag: 数组

如何一次访问数组的多个元素?

我有一个数组uint8_t数据[256]。 但每个元素都是单字节。 我的数据总线长32位。 所以,如果我想访问32位,我会: DATA = data [i] +(data [i + 1] << 8)+(data [i + 2] << 16)+(data [i + 3] << 24); 但是这会在每个1字节的内存中转换为4个单独的读取请求。 如何以1个事务的forms访问所有4个字节?

将包含char **数组的结构填充为成员C

…目前正在练习填充包含数组的结构(用于存储多个元素的char数组)。 我想尝试实现的方案如下: 一般任务是(存储学生信息,作为字符串的名称和学生作为列表或char **采取的课程) 学生信息首先从文件中加载!(myfile.txt) tokenize / parse学生信息并加载到struct 包含我的学生信息的文件是: myfile.txt (每行包含学生姓名和课程列表)由“:”分隔 Austin Barbra:Biology,chemistry,maths,music Romio Chandra:Mechanics,IT,Geology,music,Astronomy . . 我的main.c是: #include #include #include #define path “myfile.txt” typedef struct student_info { char *studt_name; char *cources_as_string; char **cources_as_list; }std_info ; std_info *myinfo; //a global var that will conatain student info int student_count = 0,cource_count=0; void load_file() { int i,yu,index=0; […]

C中每N个元素中最常见的

我有一个大的数组A,大小为[0,8388608]的“相对较小”的整数A [i] = [0,131072],我想找到每个N = 32个元素中最常出现的元素。 什么会更快, A.创建一个大小为131072的关联数组B,迭代32个元素,递增B [A [i]],然后迭代B,找到最大值,将B中的所有元素重置为0,重复| A | / 32次。 B. qsort每32个元素,找到A [i] == A [i-1]的最大范围(因此也是最常见的元素),重复| A | / 32次。 (编辑)C。别的。

如何在C编译器内部处理数组和指针类型? (int * a;与int a ;)

我需要一位拥有权威资源的语言律师。 看看下面的测试程序,它在gcc下干净地编译: #include void foo(int *a) { a[98] = 0xFEADFACE; } void bar(int b[]) { *(b+498) = 0xFEADFACE; } int main(int argc, char **argv) { int a[100], b[500], *a_p; *(a+99) = 0xDEADBEEF; *(b+499) = *(a+99); foo(a); bar(b); printf(“a[98] == %X\na[99] == %X\n”, a[98], a[99]); printf(“b[498] == %X\nb[499] == %X\n”, b[498], b[499]); a_p = a+98; *a_p […]

如何动态分配16B对齐的2d数组

我想使用memalign和16B分配2D数组(方阵),而不是仅使用malloc 。 我有 A =(float **) malloc( (*dim) * sizeof(float*)); for ( i = 0 ; i < (*dim) ; i++) { A[i] = (float*) malloc(sizeof(float)*(*dim)); } 如何用memalign更改上面的代码。

在没有VLA的情况下传递可变大小的多维数组

(这是对这个问题的跟进。) 我试图理解将多维数组传递给C中的函数的“最佳实践”(或实际上是任何实践)。当然这取决于应用程序,所以让我们考虑编写一个函数来打印一个可变大小的二维数组。 特别是,我对如何在下面的代码中编写函数printArry(_____)感兴趣。 上面引用的问题中的答案使用C的可变长度数组(VLA)特性。 这些特征在C98标准中不存在 ,并且在C11标准中是可选的(它们似乎也不在C ++ 11中编译)。 如何在不使用VLAfunction的情况下回答这个问题? 传递一个二维数组似乎是一个相当基本的任务,所以我无法想象没有一个合理的方法。 void printArry(_____){ /* what goes here? */ } int main(void){ int a1=5; int b1=6; int a2=7; int b2=8; int arry1[a1][b1]; int arry2[a2][b2]; /* set values in arrays */ printArry(arry1, a1, b1); printArry(arry2, a2, b2); return 0; }

重新分配连续的2D数组

我使用Shawn Chin在这里发布的方法生成连续的2d数组。[1] [2] 它工作得很好。 简要地从他的post: char** allocate2Dchar(int count_x, int count_y) { int i; # allocate space for actual data char *data = malloc(sizeof(char) * count_x * count_y); # create array or pointers to first elem in each 2D row char **ptr_array = malloc(sizeof(char*) * count_x); for (i = 0; i < count_x; i++) { ptr_array[i] […]

改变C中数组的大小

我编写了一个生成随机数组的程序,并使用insert和quicksort算法对其进行排序。 该程序还测量每个函数的运行时间。 arrays的大小在前导码中定义为参数化宏L 我的问题是: 如何在一次执行中使用各种大小的数组测试两种排序算法? 我希望我的程序在一次执行中对大小为L=10, 100, 1000, 5000和10000数组进行排序。 我的程序代码详述如下。 #include #include #include //Random Array Length #define MAX 100 #define L 10 void naive_sort(int[]); void smarter_sort(int[],int,int); void swap(int[],int,int); int choose_piv(int[],int,int); int main(){ int i, a[L], b[L]; clock_t tic, toc; //Generate an array of random numbers for(i=0; i<L; i++) a[i]= rand() % (MAX+1); //Define b identical […]

jni – 将int 转换为jobjectArray并将其返回给java

我想在c中创建一个新数组,保持原始数组加倍。 这是我的c代码,它编译但应用程序崩溃: #include JNIEXPORT jobjectArray JNICALL Java_com_example_jninew_MainActivity_getNum(JNIEnv *env, jobject obj, jintArray arr) { int i,j, sum = 0; jsize width = (*env)->GetArrayLength(env, arr); int array[2][2]; for (i=0; iGetObjectArrayElement(env, arr, i); int height = (*env)->GetArrayLength(env, line); jint *pos = (*env)->GetIntArrayElements(env, line, 0); for (j=0; jReleaseIntArrayElements(env, arr, pos, 0); } return array; } 主要java代码: package com.example.jninew; import […]

Variadic C函数打印多个2-D char数组

我需要在C中设置一个可变参数函数,它可以并排打印可变数量的2-D char数组。 我很难弄清楚如何使用va_arg()初始化boards变量。 关键问题是: boards[i] = va_arg(ap, char*[][BOARDSIZE]); 该行产生编译错误(目前, Second argument to ‘va_arg’ is of incomplete type ‘char *[][10]’ ),但基本上我确定我没有做正确的事情。 我只是不确定那是什么东西。 我尝试了几种变化无济于事。 其余的代码应该没问题。 (预先感谢您的任何帮助。) #include #include #define BOARDSIZE 10 void showBoardVariadic(int numArgs, …) { va_list ap; va_start(ap, numArgs); // Assign an array of 2-D char arrays. char *boards[numArgs][BOARDSIZE][BOARDSIZE]; for (int i = 0; i < […]