Tag: 数组

C中的函数指针数组

我很难理解函数指针的语法。 我要做的是,有一个函数指针数组,不带参数,并返回一个void指针。 任何人都可以帮忙吗?

将Cython中的numpy数组传递给需要动态分配数组的C函数

我有一些C代码具有以下声明: int myfunc(int m, int n, const double **a, double **b, double *c); 所以a是一个常数的二维数组, b是一个二维数组, c是一维数组,都是动态分配的。 b和c在传递给myfunc之前不需要任何具体的东西,应该被理解为输出信息。 出于这个问题的目的, 我不允许更改myfunc的声明。 问题1:如何将给定的numpy数组a_np转换为具有此C函数所需格式的数组a ,以便我可以在Cython中使用?调用此C函数? 问题2:下面的b和c的声明是否正确,或者它们是否需要采用其他格式才能使C函数将其理解为2D和1D数组(分别)? 我的尝试: myfile.pxd cdef extern from “myfile.h”: int myfunc(int p, int q, const double **a, double **b, double *c) mytest.pyx cimport cython cimport myfile import numpy as np cimport numpy as np p = […]

通过引用将字符串数组传递给C函数

我很难通过引用将一个字符串数组传递给函数。 char* parameters[513]; 这代表513个字符串吗? 以下是我初始化第一个元素的方法: parameters[0] = “something”; 现在,我需要通过引用将’参数’传递给函数,以便函数可以向其添加更多字符串。 函数头如何看起来如何在函数内部使用此变量?

ANSI-C语法 – 数组声明,如 et alii

来自-link-的ANSI C语法给出了以下数组声明规则: (1) | direct_declarator ‘[‘ type_qualifier_list assignment_expression ‘]’ (2) | direct_declarator ‘[‘ type_qualifier_list ‘]’ (3) | direct_declarator ‘[‘ assignment_expression ‘]’ (4) | direct_declarator ‘[‘ STATIC type_qualifier_list assignment_expression ‘]’ (5) | direct_declarator ‘[‘ type_qualifier_list STATIC assignment_expression ‘]’ (6) | direct_declarator ‘[‘ type_qualifier_list ‘*’ ‘]’ (7) | direct_declarator ‘[‘ ‘*’ ‘]’ (8) | direct_declarator ‘[‘ ‘]’ […]

在C中初始化整数指针数组

我对C中指针的使用有一些困惑/问题。我已经把下面的示例代码轻松地理解了。 请注意这些代码的不同之处。 如果您对它有一些问题,请收到反馈。 这不起作用。 #include #include void process() { int *arr; arr=(int*)malloc(5*sizeof(int)); arr=(int*){3,1,4,5,2}; for(int z=0;z<5;z++) { printf("%d ",arr[z]); } printf("\n"); } int main() { process(); return 0; } 但这很有效。 #include #include void process() { int *arr; arr=(int*)malloc(5*sizeof(int)); arr=(int[]){3,1,4,5,2}; for(int z=0;z<5;z++) { printf("%d ",arr[z]); } printf("\n"); } int main() { process(); return 0; } 这也有效。 为什么? […]

C中的空字节和数组

如果我声明一个像10个字符的字符数组那么… char letters[10]; 我是否创建了一组内存位置,从索引0-9表示为字符,然后第10个索引是空字节? 若是这样意味着我真的在内存中为数组创建11个位置(0到10),最后一个元素是空字节,或者我在内存中有10个位置(0到9)然后C在空格中添加空字节一个新的位置(所以数组比我声明的长1个字节)? 谢谢

C中是否有数组大小/长度的快捷方式?

有没有办法加快在C中获取数组大小? 每次输入sizeof(array)/sizeof(int)都会变旧。 任何C库都有类似.length东西,还是有一些方法我可以将sizeof(array)/sizeof(int)为某种较短的常量(也可能使用点表示法)?

C中最快的去交织操作?

我有一个指向mixed字节数组的指针,它包含两个不同数组array1和array2的交错字节。 mixed看起来像这样: a1b2c3d4… 我需要做的是解交织字节,所以我得到array1 = abcd…和array2 = 1234… 我知道提前mixed的长度,并且array1和array2的长度是等价的,都等于mixed / 2 。 这是我当前的实现(已分配array1和array2 ): int i, j; int mixedLength_2 = mixedLength / 2; for (i = 0, j = 0; i < mixedLength_2; i++, j += 2) { array1[i] = mixed[j]; array2[i] = mixed[j+1]; } 这避免了任何昂贵的乘法或除法运算,但仍然运行得不够快。 我希望有一些像memcpy这样的东西,它可以使用一个可以使用低级块复制操作的索引器来加速这个过程。 是否有比我现有的更快的实施? 编辑 目标平台是针对iOS和Mac的Objective-C。 对于iOS设备而言,快速操作更为重要,因此针对iOS的解决方案将比没有更好。 更新 感谢大家的回应,尤其是Stephen Canon,Graham Lee和Mecki。 […]

更改c指针值的正确方法

对不起,另一个C指针问题..我有一个函数func()对数组进行排序,然后得到最大和最小的整数。 我试图将它们放在main()中的指针变量中,但这些值只在func()函数内部正确。 我不明白为什么:( #include void func(int arr[], int *s, int *l, int n){ int i = 1; for(; i 0 && arr[n-1] > temp){ arr[n] = arr[n-1]; n–; } arr[n] = temp; } l = &arr[n-1]; s = &arr[0];\ printf(“%d %d\n”,*l,*s); } int main(void){ int arr[] = {1,2,9,3,58,21,4}; int *s, *l; int size = 7; […]

队列性能明智,这是更好的实现 – 数组或链接列表

当我必须插入很少的元素时,哪种方式可以提供更快的入队和出列,是否数组比链表更好? 我需要插入一些元素,我必须从队列中删除并读取已删除的元素。 如果是数组,我可能每次删除元素时都要修改索引。 插入和删除也可能同时发生。 从下面的案例中哪个更好? typedef struct{ mylist list; struct mylistQ *next; }mylistQ; 数组代码 static mylist myListQ[QUEUESIZE+1]; int qLast = 0; void enqueue_element(mylist qItem) { myListQ[qLast] = qItem; qLast++; } mylist dequeue_element() { retryq: if(qLast >0) { mylist qReturn = myListQ[0]; int i; for (i = 0; i < qLast – 1; i++){ myListQ[i] = […]