Tag: 指针

c – 读取数组时的访问冲突

我试图读取数据数组并接收访问冲突。 我可以使用以下函数从数组中读取数组中的数据: AllCurrentData[newLineCount].data[tabCount] = malloc(length + 1); strcpy( AllCurrentData[newLineCount].data[tabCount], buffer ); printf(“%s”, AllCurrentData[newLineCount].data[tabCount]); 但是在function之外无法读取它。 这是我获得访问冲突的地方,看起来它正在尝试读取空位置。 如何在不同的函数中访问数组AllCurrentData中的数据? 谢谢! 额外信息: typedef struct current{ char **data; }CurrentData; AllCurrentData在main中声明: CurrentData *AllCurrentData = ‘\0’; 函数调用 getCurrentData(current, AllCurrentData); printf(“%s”, AllCurrentData[0].data[0]); //<—– error here

定义返回函数指针的函数的各种样式是什么?

我有一个function: int compare(char * c1, char * c2){ … … } 我可以编写一个函数int ret_compare(void * item)返回指向比较的函数的各种样式是什么?

从(char *)到(int *)的引用解引用在此示例中未被理解

我正在网站上对C进行练习测试,我碰巧看到了这个问题。 我的疑问在评论中有解释,所以请阅读它们。 #include int main() { int arr[3] = {2, 3, 4}; // its assumed to be stored in little-endian ie; // 2 = 00000010 00000000 00000000 00000000 // 3 = 00000011 00000000 00000000 00000000 // 4 = 00000100 00000000 00000000 00000000 char *p; p = arr; p = (char*)((int*)(p)); printf(“%d “, *p); p = […]

使用双指针访问2D数组元素

最近我在C面试了一次。 面试官让我解释如何使用double pointer访问2D array特定元素。 我给出答案为*(*(a+i)+j) ,其中a是双指针, i是行数, j是列数。 后来他让我用一个例子来解释。 我对*(a+i)感到困惑,因为它给出了值而不是地址,并且添加到j给出了一些垃圾值。 任何人都可以解释。

指针解除引用如何工作?

#define SWAP_PTRS(a, b) do { void *t = (a); (a) = (b); (b) = t; } while (0) Node* MergeLists(Node* list1, Node* list2) { Node *list = NULL, **pnext = &list; if (list2 == NULL) return list1; while (list1 != NULL) { if (list1->data > list2->data) SWAP_PTRS(list1, list2); *pnext = list1; pnext = &list1->next; list1 […]

将命令行参数复制到数组中

对于一个程序,我想使用malloc()通过命令行发送的参数的数组副本。 因此,例如,如果我执行./a.out一两三,我想要一个带有{a.out,one,two,3}的数组。 但是,我有一些问题让我的程序工作。 这就是我所拥有的: static char** duplicateArgv(int argc, char **argv) { char *array; int j = 0; // First allocate overall array with each element of char* array = malloc(sizeof(char*) * argc); int i; // For each element allocate the amount of space for the number of chars in each argument for(i = 1; i […]

传递给函数时,文件指针的行为会有所不同。 为什么?

所以我有这个代码 void getdata(int *q) { for(int i=0;i<3;++i) scanf("%d",q++); *q=10; } int main() { int *p,a[4]; p=a; getdata(p); printf("%d",*p); return 0; } 而且输出很明显。 7 8 9 7 但文件指针不能以相同的方式工作。 我试图编写一个基本代码,用于将数据附加到文件中。 void getdata(FILE *fp) { char ch; while((ch=getchar())!=EOF) fputc(ch,fp); rewind(fp); } void printdata(FILE *fp) { char ch; while((ch=fgetc(fp))!=EOF) putc(ch,stdout); } int main() { FILE *fp1; fp1=fopen(“music.txt”,”w+”); getdata(fp1); printf(“Text […]

通过引用将二维数组传递给函数(C编程)

我正在学习指针,现在卡住了一个小时,用这段代码, #include int determinant(int **mat) /* int mat[3][3] works fine.. int *mat[3] doesn’t.. neither does int *mat[] */ { int det; int a=*(*(mat+0)+0); // printf(“\n%d”,a); int b=*(*(mat+0)+1); // printf(“\n%d”,b); int c=*(*(mat+0)+2); // printf(“\n%d”,c); int d=*(*(mat+1)+0); // printf(“\n%d”,d); int e=*(*(mat+1)+1); // printf(“\n%d”,e); int f=*(*(mat+1)+2); // printf(“\n%d”,f); int g=*(*(mat+2)+0); // printf(“\n%d”,g); int h=*(*(mat+2)+1); // printf(“\n%d”,h); int i=*(*(mat+2)+2); […]

“释放的指针未被分配”内存块由于某种原因不会解除分配

我很难找到为什么我不能释放内存块。 指针必定有问题。 用于结构的存储器块在函数中进行,并且所使用的指针存储在数组中。 稍后,从数组中取出指针以释放内存。 我已经弄清楚它是免费的。 我把“//这一个”放在旁边。 #include typedef enum { INT = 0, FLOAT = 1, STRING = 2, NONE = 3, BOOL = 4 } TYPE; typedef struct { TYPE type; void * data; } Variable; typedef Variable ** var; //Convenience typedef for pointer to variable pointer typedef struct { size_t size; Variable *** […]

C ++ – 通过函数返回2D数组

我环顾四周试图找出是否应该在C ++中返回一个二维数组,但得到的答案却很复杂。 一些答案说不,因为数据是函数的本地数据,当它返回时,数组指向“垃圾数据”(因为它可以随时被覆盖)。 但是,有些人说“是的,就像一个正常的数组一样返回它”。 所以,我的困境: 我有一个2D数组,其中包含指向Tile对象的指针 Tile* map[128][128]; 我应该在函数中返回数组吗? 为什么或者为什么不? 如果答案是肯定的,我该怎么做? 编辑:我不清楚。 我想制作一个getter方法来返回map变量,并能够在另一个函数中使用数组中的指针。