Tag: 指针

实现链表时指针奇怪的问题

我正在尝试在C中实现链接列表,并且我想将头节点存储在单独的结构中。 但是,每当我添加另一个节点时,似乎都会以某种方式重新分配头节点。 #include #include struct BC_node { struct BC_node *next; void *data; }; struct BC_list { struct BC_node *head; struct BC_node *tail; }; void BC_list_push(struct BC_list *list, void *data) { struct BC_node *node = calloc(1, sizeof(struct BC_node)); if (list->head != NULL) printf(“head: %d\n”, *((int *) (list->head)->data)); node->next = NULL; node->data = data; if (list->head == […]

关于未初始化指针指向任何地方这一事实的困惑

#include int main(void) { int *ptr; printf(“%p”, ptr); // Error: uninitialized local variable ‘ptr’ used // Output is “0” } 我正在阅读有关空指针的C-FAQ 。 它说未初始化的指针可能指向任何地方。 这是否意味着它指向内存中的随机位置? 此外,如果此声明为真,如果我尝试printf(“%p”,ptr) ,为什么会出现错误? 由于未初始化的指针ptr指向某个随机位置,似乎它必须打印出这个随机位置!

指针和该指针的地址导致相同的事情

当我看到这些线条时: BYTE MessageToProcess[MAX_MESSAGE_LENGTH]; TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)&MessageToProcess; 我对自己说,第二行必须是这样的: TcpIpPacketHdr *pHdr = (TcpIpPacketHdr*)MessageToProcess; 但是当我检查调试模式时,“pHdr”指向与两个示例中的“MessageToProcess”相同的东西,而在第一个代码中的MessageToProcess之前有一个“&”,所以通常pHdr应该包含MessageToProcess的地址而不是它指向的字节的地址,例如,messageToProcess中的第一个元素。 那么问题是怎么回事? 我们正在处理指向字节而不是函数的指针,因此添加&必须更改等式。 稍后在代码中我们使用pHdr,如下所示: pHdr->size+2 但最初,在第一个代码中,它确实包含将地址保存到数组的第一个字节的指针的地址。

矩阵,指针,C *

我有这样的代码: void print_matrix(int **a, int n) { int i, j; for(i = 0; i < n; i++) { for(j = 0; j < n; j++) printf("%d\t", *(a+i*n+j)); putchar('\n'); } } int main () { int matrix[3][3]; insert (matrix); /* Function that reads Matrix from stdin */ print_matrix(matrix, 3); return 1; } 我收到GCC错误: 期望’int **’但参数类型为’int(*)[3] 我阅读了所有相关主题,但我仍然无法找到我的问题的答案,因此在将其标记为重复之前,请阅读它。 […]

修改作为函数传入的字符串文字

如果我在程序中有一个function int main(){ char *name = “New Holland”; modify(name); printf(“%s\n”,name); } 调用此函数 void modify(char *s){ char new_name[10] = “Australia”; s = new_name; /* How do I correct this? */ } 如何更新字符串文字名称(现在等于新荷兰语)的值与澳大利亚。 我认为我面临的问题是new_name是本地存储,因此在函数返回后,该变量不会被存储

指针框和圆图

鉴于以下准则 int main() { int z; int **x; int * y; x = (int**)malloc(sizeof(int*)); y = (int*)malloc(sizeof(int)); *y = 6; *x = y; // Point 1 z = 3; *x = &z; // Point 2 } 我将在第1点和第2点绘制变量的方框图。 以下是我得到的第1点。 以下是我对第2点的看法。 任何人都可以确认我的方法是否正确和我的解决方案? 抱歉,我是指针和c的新手。

使用函数更改指针包含的地址

如果我已经将指针p声明为int *p ; 在主模块中,我可以通过指定p=&a;来改变p所包含的地址p=&a; 其中a是已经声明的另一个整数变量。 我现在想用一个函数改变地址:: void change_adrs(int*q) { int *newad; q=newad; } 如果我从主模块调用此函数 int main() { int *p; int a=0; p=&a; // this changes the address contained by pointer p printf(“\n The address is %u “,p); change_adrs(p); printf(“\n the address is %u “,p); // but this doesn’t change the address return 0; } 地址内容不变。 […]

在C中传递2D指针数组

对于我的程序,我需要将一个2D数组指针传递给一个单独文件中的函数。 我在下面写了一个类似语法的文件: #include #include typedef struct { int state; int design; } card_t; card_t *cardSet[5][5]; void setFirst(card_t *cards[][]) { // state = 1; } int main() { setFirst(cardSet); // <- Error: Type of formal parameter 1 is incomplete return 0; } 当我将代码更改为所有1D数组时,它编译得很好,但对于2D数组,我得到上面显示的错误。 这两种情况有什么区别? 谢谢! 卡梅伦

每次运行函数时都要进行Malloc’ing并重置数组

struct variables { unsigned int counter; char *bra; unsigned int maxb; int *findtheking; unsigned int numoright; }; int getlen = 0; // I give getlen a value in another function int solo = 0; mat.bra = (char*)malloc(sizeof(char)*getlen); mat.bra = ‘\0’; struct variables pal = { 0, ‘\0’, 0, 0, 0 }; struct variables mat = […]

与C中的typedef和指针混淆

可能重复: Typedef指针好主意? 我对以下内容感到困惑: typedef struct body *headerptr; 现在,当我创建类型headptr指向结构体的东西时,创建一个新的headerptr将如下(我不确定我是否正确地执行此操作): headerptr newHeadptr; 我是否正确地假设这将是一个指向结构体的指针?