Tag: 数组

如何使用气泡排序或选择排序按降序对指针数组中的数组进行排序?

我正在研究一个项目,它以几种不同的方式对指针数组中的数组进行排序,但我仍然坚持一种排序方式。 arrays的构建方式是第一个数字表示后面的数字量。 例如,(3,0,23,1):此数组在第一个索引后有3个数字)。 我想从最低到最高的数字对数组进行排序, 但我不想更改第一个索引,这意味着数组看起来像这样(3,0,1,23)。 这些是数组和指针数组: int arr1[] = { 3, 9, 6, 7 }; int arr2[] = { 2, 5, 5 }; int arr3[] = { 0 }; int arr4[] = { 1, 6 }; int arr5[] = { 4, 5, 6, 2, 1 }; int * pArr[SIZE] = { arr1, arr2, arr3, arr4, […]

创建一个char *的2D数组,用回调函数中的sqlite数据填充它

在我的函数中,我调用rc = sqlite3_exec(db, sqlStatement, callback, &a, &zErrMsg); 具有callback函数的函数。 在这个callback函数中,我想用数据库中的数据填充二维char *数组。 struct mytable { char ***data; size_t dim; }; static int callback(void *data, int argc, char **argv, char **azColName) { struct mytable *old = (mytable *)data; char ***temp; old->dim++; temp = (char ***)realloc(old->data, old->dim * sizeof(*old->data)); if (temp) { old->data = temp; old->data[old->dim – 1] = […]

如何在C中旋转90度的图像

我一直试图将图像变成黑白图像,然后用C旋转90度,但我对编程很新,这就是我所要做的。 #include #include int main () { FILE* first; FILE* second; FILE* third; int counter; char c; int width, height, pixelmax, average; int pixelred, pixelgreen, pixelblue, black[300][300][3]; int i, j, timer=0; int k, f=0; first=fopen(“blackbuck.ppm”,”r”); second=fopen(“blacktrout.ppm”,”w”); 这会跳过前几行代码 for(counter=1;counter<3;counter++){ do{ c=getc(first); }while(c != '\n'); } fscanf(first,"%d%d", &width,&height); fscanf(first,"%d", &pixelmax); 在这个程序的这一部分,我通过取平均值将像素转为黑白,这是最容易的部分。 for(i=0, j=0; i<width;i++, timer++){ fscanf(first,"%d%d%d",&pixelred,&pixelgreen,&pixelblue); average=(pixelred+pixelgreen+pixelblue)/3; […]

数组结构,结构数组和内存使用模式

我一直在阅读有关SOA的内容,我想在我正在构建的系统中尝试实现它。 我正在编写一些简单的C结构来做一些测试,但我有点困惑,现在我有一个vec3 3个不同的结构。 我将在下面显示它们,然后进一步详细说明这个问题。 struct vec3 { size_t x, y, z; }; struct vec3_a { size_t pos[3]; }; struct vec3_b { size_t* x; size_t* y; size_t* z; }; struct vec3 vec3(size_t x, size_t y, size_t z) { struct vec3 v; vx = x; vy = y; vz = z; return v; } struct vec3_a vec3_a(size_t […]

将C数组中的元素复制到不同的数组中

我正在完成一个循环缓冲区的工作,当它变满时需要加倍它。 但是,我无法弄清楚如何将元素从旧缓冲区复制到新缓冲区。 我的代码如下: #define startSize 10 #define fiveMin 300 cbuf* cbuf_init(){ cbuf *buffer = malloc(sizeof(cbuf) + 9 * sizeof(quote)); buffer->currSize = 0; buffer->maxSize = startSize; //buffer->startAt = 0; buffer->start = 0; buffer->end = 0; buffer->freeSlots = startSize; //buffer->currIndex = 0; return buffer; } void cbuf_update(cbuf *cb_ptr, unsigned int time, double rate){ if(cb_ptr->freeSlots == 0){ printf(“EXPANDING […]

C语言中字符串数组的动态分配

对于家庭工作,我需要定义一个将内存分配给字符串数组的函数(它是一个结构体)。 给出每个字符串的长度:MAX_WORD_LEN + 1(= 10 + 1)我必须为len个字符串分配内存, len在输入中接收。 具有字符串数组定义的struct(给定): struct dict{ int len; char (*dict0)[MAX_WORD_LEN+1]; char (*dict1)[MAX_WORD_LEN+1]; }; 我不明白声明char (*dict0)[MAX_WORD_LEN+1]; 函数声明也给出了: void createDict(struct dict * myDict); 这是我写的,但我不确定它是否有效,而且我很难在编译器中检查它。 我也根据这个和其他网站的post写了它,并没有真正理解它: 选项1: void createDict(struct dict* myDict) { myDict->(*dict0) = malloc( (myDict->len)*sizeof(char*)); myDict->(*dict1) = (char**) malloc( (myDict->len)*sizeof(char*)); for(int i=0;ilen);i++) { (myDict->(*dict0)[i]) = (char*)malloc((MAX_WORD_LEN+1)*sizeof(char)); (myDict->(*dict0)[i]) = (char*)malloc((MAX_WORD_LEN+1)*sizeof(char)); } } 方案2: […]

数组作为函数参数

考虑以下代码: #define MAX_COUNT 4 static int foo(int w[MAX_COUNT]) { int *p = w; if (w) { w[0] = 10; w[1] = 20; w[2] = 30; w[3] = 40; } return 0; } 它是否可移植,合法地将NULL传递给上面定义的foo()(例如,对于我不需要更改w []的情况)? 鉴于数组的名称是指向其第一个元素的指针,在我看来它应该没问题,但是我觉得我错过了什么? 谢谢 !

结构中的数组

我是C的新手,在嵌入结构时遇到arrays类型问题。 以下是我的问题的一个例子: typedef struct { double J[151][151]; } *UserData; static int PSolve(void *user_data, N_Vector solution) { UserData data; data = (UserData) user_data; double J[151][151]; J = data->J; /* Solve a matrix equation that uses J, stored in ‘solution’ */ return(0); } 当我尝试编译这个时,我得到错误:从类型’double(*)[151]’分配类型’double [151] [151]’时出现不兼容的类型 我目前的解决方法是用代码中的’data-> J [x] [y]’替换’J [x] [y]’来求解矩阵方程,但是分析表明这样做效率较低。 将参数更改为PSolve不是一个选项,因为我正在使用sundials-cvode解算器来规定参数的类型和顺序。 谢谢你的帮助,安德鲁

如何从字符串中获取单词并将它们放在字符串数组中? 在C.

我基本上在一个字符串中有一个句子,并希望将每个单词的单词分解。 每个单词都应该进入一个字符串数组。 我不被允许使用strtok 。 我有这个代码,但它不起作用。 有人可以帮忙吗? 在互联网上肯定有类似的东西,但我找不到任何东西…… int main(){ char s[10000]; // sentence char array[100][100]; // array where I put every word printf(“Insert sentence: “); // receive the sentence gets(s); int i = 0; int j = 0; for(j = 0; s[j] != ‘\0’; j++){ // loop until I reach the end for(i = 0; […]

在C中为字符数组添加一个是什么?

我正在查看一些用于学习目的的代码。 我正在研究这部分代码。 // eg const unsigned char data={0x1,0x7C … } unsigned char buf[40]; memset(buf,0,40); buf[0] = 0x52; memcpy(buf+1, data, length); // What does buf+1 do in this situation? 在调用memcpy的最后一行,buf + 1做了什么? buf是一个字符数组,所以+1会对它做什么?