Tag: 指针

分段错误但无法解释如何,内存分配对我来说很好看

我有一个节点,我正在定义其全局指针变量,如下所示: typedef struct node { char* word; struct node* next; } node; node* HashTable = NULL; node* HeadOfHashTable = NULL; 现在,我分配了如下内存: void allocateMemory(int numOfElements, bool isRealloc, const char* word) { if(!isRealloc) { printf(“Allocating %d blocks\n”, numOfElements); HashTable = malloc(sizeof(node*) * numOfElements); } else { printf(“Reallocating %d blocks for %s”, numOfElements, word); HashTable = realloc(HashTable, sizeof(node*) […]

“array”和“&array ”完全可以互换吗?

是的,以前曾经多次询问过,但我想知道哪一个更合适? typedef struct { int a; int addr[8]; } usr_command; usr_command* p_usr_command; int foo(int* parameter) {} 那么哪一个不太容易出问题? foo(p_usr_command->addr); 要么 foo(&p_usr_command->addr[0]); ?

为什么这些交换函数的行为不同?

#include void swap1(int a, int b) { int temp = a; a = b; b = temp; } void swap2(int *a, int *b) { int *temp = a; a = b; b = temp; } void swap3(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } main() { int […]

标量初始值设定项的多余元素,用于指向int数组的指针

我正在研究K&R(例如5-9),我试图转换原始程序的2D数组 static char daytab[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; 使用指向13个int数组的指针 static char (*daytab)[13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, […]

arrays数组,大小不同

我有一个数组,每个单元格都有数组。 例如,大数组称为arr : int a[3] = {3, 2, 1}; int b[2] = {2, 1}; int *arr[2] = {a, b} 现在问题是,如果我想在大arrays内打印小arrs。 这是我的代码: #include void printArr(int arr [], int n) { for (int i = 0 ; i < n ; i++) { printf("%d ", *(arr + i)); } printf("\n"); } int main() { int a[5] = […]

从C中的函数返回一个字符串

我有一个ac函数,我想返回一个字符串。 如果我在返回之前打印字符串,那么我会看到croc_data_0186.idx 如果我尝试打印返回的字符串,那么我会看到croc_data_á☼ 谁能看到我做错了什么? 问题function: char* getSegmentFileName(FILE *file, int lineLength, int lineNumber) { char* fileNameString; fseek(file, lineNumber * lineLength, SEEK_SET); char line[lineLength]; fgets(line, lineLength, file); char *lineElements[3]; lineElements[0] = strtok(line, “:”); lineElements[1] = strtok(NULL, “:”); lineElements[2] = strtok(NULL, “:”); fileNameString = lineElements[2]; printf (“getSegmentFileName fileNameString is: %s \r\n”, fileNameString); return fileNameString; } 调用代码: int indexSearch(FILE […]

在C中写入指向文件的指针

我有一个结构: typedef struct student { char *name; char *surname; int age; } Student; 我需要将它写入二进制文件。 Student *s = malloc(sizeof(*s)); 我用数据填充我的结构,然后我写入文件: fwrite(s, sizeof(*s), 1, fp); 在我的文件中不存在名称和姓氏,它有char *的地址。 我如何写一个单词,而不是一个地址?

c和数组边界中的指针算法

我正在浏览一个有一些常见问题解答的网页 ,我发现了这个陈述。 类似地,如果a有10个元素且ip指向a [3], 则无法计算或访问ip + 10或ip – 5. (有一种特殊情况:在这种情况下,您可以计算,但不能访问,一个指向不在数组末尾的不存在元素的指针,在本例中是&a [10]。 我对这句话感到困惑 你无法计算ip + 10 我可以理解访问元素超出界限是未定义的,但计算!!! 我写了下面的片段,它计算 (让我知道这是网站对计算的意义 )指针越界。 #include int main() { int a[10], i; int *p; for (i = 0; i<10; i++) a[i] = i; p = &a[3]; printf("p = %p and p+10 = %p\n", p, p+10); return 0; } $ ./a.out p […]

malloc-ating函数中的多维数组

我正在尝试在C程序中分配2d数组。 它在这样的主函数中工作正常(如此处所解释): #include #include int main(int argc, char ** argv) { int ** grid; int i, nrows=10, ncols=10; grid = malloc( sizeof(int *) * nrows); if (grid == NULL){ printf(“ERROR: out of memory\n”); return 1; } for (i=0;i<nrows;i++){ grid[i] = malloc( sizeof(int) * ncols); if (grid[i] == NULL){ printf("ERROR: out of memory\n"); return 1; } […]

为什么我不能增加一个数组呢?

char a[] = “hello”; 我的理解是,行为类似于指向字符串的常量指针。 我知道写a++不行,但为什么呢?