Tag: 数组

在C中定义数组

我有几个450元素字符数组(存储在lcd屏幕上显示的位图数据。)我想将它们放在头文件下并#define它们,但我不断收到编译错误。 我怎么用C做这个? #define numbers[450] {0, 1,etc…} #define numbers {0, 1, etc…} #define numbers[450]然后设置数字 还有很多…

将堆分配的指针强制转换为指向VLA的指针是否安全?

如果我有一个指向某个堆分配空间的指针,该空间代表一个典型的行主要二维数组,是否可以将此指针强制转换为指向VLA的等效指针以方便子脚本编写? 例: // // Assuming ‘m’ was allocated and initialized something like: // // int *matrix = malloc(sizeof(*matrix) * rows * cols); // // for (int r = 0; r < rows; r++) { // for (int c = 0; c < cols; c++) { // matrix[r * cols + c] = some_value; // } […]

C中的数组和指针有什么区别?

这个问题可能听起来很愚蠢,但我并不确定。 我的意思是,有什么区别: char* line = (char*) malloc(MAX_LINE_LEN); 和 char line[MAX_LINE_LEN]; 究竟? 我知道前者是一个指针而后者是一个数组,但系统如何区分呢? 如何分配/存储内存? 另外,为什么可以在声明为指针时删除line占用的内存,而不是当它是数组时? 我认为数组存储在其他地方,系统会在超出范围时自动释放内存,这在处理指针时不会发生,所以你必须自己删除它。 我错了吗?

编译器用a 做什么?a是数组? 如果a是指针怎么办?

c-faq告诉我,编译器在处理a [i]时做了不同的事情,而a是数组或指针。 这是c-faq的一个例子: char a[] = “hello”; char *p = “world”; 鉴于上面的声明,当编译器看到表达式a [3]时,它会发出代码从位置“a”开始,移动三个,然后在那里获取字符。 当它看到表达式p [3]时,它会发出代码从位置“p”开始,在那里获取指针值,向指针添加三个,最后获取指向的字符。 但有人告诉我,在处理[i]时,编译器倾向于将a(这是一个数组)转换为指向数组的指针。 所以我想查看汇编代码以找出哪个是正确的。 编辑: 这是本声明的来源。 c-faq并注意这句话: formsa [i]的表达式导致数组衰减成指针,遵循上面的规则,然后被下标,就像表达式p [i]中的指针变量一样(尽管最终的内存访问将是不同,“ 我对此很困惑:既然a已经衰减到指针,那为什么他的意思是“内存访问会有所不同?” 这是我的代码: // array.cpp #include using namespace std; int main() { char a[6] = “hello”; char *p = “world”; printf(“%c\n”, a[3]); printf(“%c\n”, p[3]); } 这是我使用g ++ -S array.cpp获得的汇编代码的一部分 .file “array.cpp” .section .rodata […]

如何在C中动态分配整数数组

我的C代码的一部分如下所示。 int data[10]={1,3,6,8,1,7,9,1,1,1}; b=10; int out[b]; process(data, &b, out); alpha (out, b); data和out是int数组。 函数进程获取长度由b(= 10)指向的数组数据并执行数学运算,然后返回一个数组,其长度再由b返回(未知,因此需要动态分配)。 然后使用函数alpha发送数组输出。 现在函数alpha总是发出[10],因为b在第二行代码中被声明为10。 如何动态分配数组,使其仅包含函数进程后返回的有效数据。

如何在C中声明可变大小的2D数组?

我的项目有问题。 我必须制作一个可变大小的2D数组来存储一些预测误差。这是关于图像的。 麻烦的是我必须加载不同大小的图像,所以对于每个图像,我必须进入一个文件,相应的像素数的二维数组..我在你的问题中搜索,但它不是我在看什么for.Can有人帮助我吗? 谢谢

Swig,返回一系列双打

我知道,通常有很多方法可以解决某些问题。 但在这里,我知道我希望它采用哪种方式,但我无法使其与Python和SWIG一起使用… 我有一个C函数,它返回一个double值数组: double *my(int x) { double a,b,*buf; buf = malloc (x * sizeof(double)); a=3.14; b=2.7; buf[0]=a; buf[1]=b; return buf; } 在这里,我明确地希望将数组作为返回值。 不像在许多示例中那样写入输入数组的’void’函数。 现在,我想获得一个SWIG-python包装器,它可以用作: >>> import example >>> print example.my(7) [3.14,2.7] 无论我做什么,我都有一些概念上的问题 – 我总是得到s.th. 喜欢 我试图在swg文件中定义一些类型图: %typemap(out) double [ANY] { int i; $result = PyList_New($1_dim0); for (i = 0; i < $1_dim0; i++) { […]

变量的前向声明?

我有一些C代码,我必须移植到C ++。 代码有一个结构 struct A { … struct A * myPtr; } 现在声明和初始化两个全局数组,如下所示: //Forward declaration of Unit struct A Unit[10]; struct A* ptrUnit[2] = { Unit, Unit+7 }; struct A Unit[10] = { { .., &ptrUnit[0] }, … }; 现在虽然这在C中运行良好,但它在C ++中给出了错误(变量重新声明)。 是不是允许变量在C ++中进行前向声明?

在C中声明一个数组而不给出大小

声明这样的数组时: int array[][] = { {1,2,3}, {4,5,6}}; 我得到一个错误说:“数组类型具有不完整的元素类型” 到底是怎么回事??

使用std :: sort()按元素块排序

我有一个边数组,它被定义为C风格的双精度数组,其中每4个双精度定义一个边,如下所示: double *p = …; printf(“edge1: %lf %lf %lf %lf\n”, p[0], p[1], p[2], p[3]); printf(“edge2: %lf %lf %lf %lf\n”, p[4], p[5], p[6], p[7]); 所以我想用std::sort()按边长度排序。 如果它是一个struct Edge { double x1, y1, x2, y2; }; Edge *p; struct Edge { double x1, y1, x2, y2; }; Edge *p; ,我会很高兴。 但在这种情况下,double数组的块大小不是由指针类型表示的。 qsort()允许您显式指定块大小,但std::sort()通过指针类型推断块大小 。 出于性能原因(内存使用和CPU),让我们说创建新数组或以某种方式转换数组是不可取的。 出于性能原因,让我们说我们确实想使用std::sort()而不是qsort() 。 是否可以在转换数据时不浪费单个CPU周期来调用std::sort() ? […]