Tag: 指针

指向本地指针数组的全局指针

我在一个函数中有一个指向数组的指针数组。 我需要在另一个函数中访问该数组。 指针数组 char *ptr[size + 1]; 我做了一个全局指针 char *p; 我指向ptr(与ptrfunction相同) p = *ptr; 然后我试图从其他function访问ptr void otherFunction(void){ for(int n = 0; n < 6; n++) { char* str = &p[n]; printf("%i %s\n", n, str); } } 什么时候 ptr[0] = “abcd” ptr[1] = “bcde” ptr[2] = “cdef” ptr[3] = “defg” ptr[4] = “efgh” ptr[5] = “fghi” […]

QSorting malloc’d结构数组?

我在C中的qsort有这个比较器function,但无论我尝试什么,我似乎都会遇到分段错误… int textCompare ( const void * a, const void * b ){ const char **x =(const char**)a; const char **y =(const char**)b; return strcmp(*x, *y); } 这是我的qsort调用:其中message** mList = malloc(INITIAL_CAPACITY * sizeof(message)); 和count是一个整数,跟踪最后一个元素。 message只是一个typedef结构,包含一个int和一个指向char的指针。 我67%肯定我正确地调用了qsort,有人能指出我正确的方向吗? qsort (*mList, count, sizeof(message), textCompare); [编辑]我声明消息***而不是消息*的原因是因为我正在尝试初始化指向结构的指针“数组”; 除非我以错误的方式解决这个问题?

C:如何访问存储在void指针中的函数指针(void *)?

混淆了如何访问存储在void指针中的函数指针(void *)。 假设你有这个: void *functions[] = { &sqrt, // int ft_sqrt(int nb); &power, &logN, &factorial; }; // An array of void pointers, each storing a function pointer. 如果我想访问sqrt函数,我的猜测如下: (int (*)(int)) functions[0](x) 但我的猜测是错误的: error: called object type ‘void *’ is not a function or function pointer 那么如何访问其中一个函数呢?

使用&或*在C中分配指针的不同方法?

在C中,如果我想要一个指向变量的指针 int c = 12 ; int *p ; p = &c ; 或者我可以这样做 int c = 12; int p; p=&c; 在这两种情况下,p的值都是c的地址,请你告诉我将面临的问题。

如何在C中动态分配2D数组?

所以我有一个带结构的程序 typedef struct s_struct { int rows; int cols; char* two_d; //This is supposed to be the 2D array } *GRID; 我想创建一个敲击并动态分配内存,然后填充2D数组,但我不知道如何。 这是我对create(int prows,int pcols)函数的作用: GRID grid = malloc(sizeof(struct s_struct)); grid ->rows = prows; grid ->cols = pcols; grid ->two_d = malloc(sizeof(char) * (rows*cols)); 我不明白这是如何创建一个2D数组,如果它甚至如此,以及如何填充数组。

文件/程序范围内的2D数组

我需要一个可以从不同方法访问的数组,我必须在main()中分配这个数组,然后让其他函数如foo()访问这个数组。 这个问题帮助我分配了数组: 用malloc定义一个2D数组并修改它 我正在定义这样的数组: char(*array)[100] = malloc((sizeof *array) * 25200); 我在main()中这样做 我可以在这个数组中存储25200个字符串,通过array[1]访问它们 现在可以从不同的方法访问此数组,我该怎么做?

使用sizeof分配是否会为结构指针生成错误的大小?

使用valgrind读取这个我得到:无效的写入/读取大小4 struct Person{ char* name; int age; }; struct Person* create_person(char *name, int age) { struct Person* me = (struct Person*)malloc(sizeof(struct Person*)); assert(me!= NULL); //make sure that the statement is not null me->name = name; me->age = age; return me; } 使用这个用valgrind得到干净的日志 struct Person{ char* name; int age; }; struct Person* create_person(char *name, int age) […]

带有void *指针的Typedef函数

我正在尝试实现库中定义的函数,但是我遇到了使用它的问题。 这个问题帮助我实现它,但我无法使用该function。 这是typedef: typedef void (*paillier_get_rand_t) ( void* buf, int len ); 以下是我如何实现它: void get_rand(void* buf, int len) { buf = (void *)rand(); // I don’t know if it works but isn’t the problem } 在这里我如何创建指向函数的指针并调用它。 int modulus = 4; void* buf; paillier_pubkey_t* pub; paillier_prvkey_t* prv; paillier_keygen(modulus, &pub, &prv, &get_rand); 问题1)我如何发送参数buf和len? 问题2)现在错误是不同的: reference to `paillier_keygen(int, […]

对于循环停止无缘无故

所以我正在尝试制作一个程序来读取ppm文件并将其存储在内存中,我已经完成了一切颜色,这个function给了我一些问题: typedef struct{ int red, green, blue; } COLOR; COLOR * getNextColor(FILE *fd); COLOR **getColors(FILE *fd, int width, int height){ printf(“\nentered get colors”); COLOR **colors = malloc(sizeof(COLOR*)*height); printf(“\nallocated %d space height”,height); int i,j; for(i = 0; i < height; i++, colors++){ *colors = malloc(sizeof(COLOR)*width); printf("\nallocated %d space width",width); for(j = 0; j < width; j++, […]

取消引用指向整个数组的指针

我正在学习用C指向(整个)数组的指针。 假设我声明了一个2d的整数矩阵: int arr[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; 现在,我声明一个适当类型的指针: int (*ptr)[3][3]; 初始化它: ptr = &arr; 现在,ptr包含arr的地址。 ptr —>&(arr[0][0] arr[0][1] arr[0][2] arr[1][0] arr[1][1] arr[1][2] arr[2][0] arr[2][1] arr[2][2]) 那么,当我们取消引用ptr时,它应该产生第一个位置,不是吗? printf(“%d”, *ptr)在编译时出错。 要打印第一个元素,我要使用***ptr 。 我有两个问题: 我无法理解三重解除引用的必要性。 如果*ptr没有指向数组的第一个元素,它指向什么?