Tag: 指针

交换单链表中的节点

我试图交换两个节点。 例如,如果节点是a和b我正在传递指针 (a-1)->next和(b-1)->next ,它们基本上是节点a和b 。 void swap(struct stack **a,struct stack **b) { struct stack *temp1 = *a, *temp2 = *b, *temp3 = *b; *a = *b; (*b)->next = (temp1)->next; temp2 = temp1; (temp2)->next = temp3->next; } 我究竟做错了什么? 当我在调用函数后尝试打印节点时,它是一个无限循环。 请帮忙。

在函数内分配内存后使用双指针

我正在使用C中的双指针,并且想知道我是否创建了一个初始化表的函数,当我尝试使用InitStringTable分配的内存时,它会在返回main时崩溃。 我相信一个简单的解决方法是使strTable全局化,然后我相信它没关系,但我不想这样做,因为这对我来说是一个学习练习,可以通过表格进行修改,即我应该能够修改strTable来自在InitStringTable之后的main或另一个函数modifyTable。 谢谢你提供的所有帮助。 int main() { char** strTable; // Allocates memory for string table. InitStringTable(strTable); // Below lines should be able to copy strings into newly allocated table. // Below lines cause crash however. strcpy(strTable[0], “abcdef”); strcpy(strTable[1], “xy”); } // Allocates memory for the string table. This function should create a table // of size […]

使用带有指向stdin的文件指针的fseek

根据命令行参数,我设置一个文件指针指向指定的文件或stdin(用于管道)。 然后我将这个指针传递给许多不同的函数来从文件中读取。 这是获取文件指针的函数: FILE *getFile(int argc, char *argv[]) { FILE *myFile = NULL; if (argc == 2) { myFile = fopen(argv[1], “r”); if (myFile == NULL) fprintf(stderr, “File \”%s\” not found\n”, argv[1]); } else myFile = stdin; return myFile; } 当它指向stdin时, fseek似乎不起作用。 通过这个,我的意思是我使用它,然后使用fgetc ,我得到了意想不到的结果。 这是预期的行为吗?如果是,我该如何移动到流中的不同位置? 例如: int main(int argc, char *argv[]) { FILE *myFile = […]

增加指针,精确序列

我刚刚开始学习C,我明白了 *a = *b; a++; b++; 和 *a++ = *b++ 是等价的,但这是线路时实际发生的事情 *a++ = *b++ 叫做? 有人可以澄清编译器如何解释第二行吗? 我知道从右到左的优先级等等,但有人可以准确地编写编译器用来解释这行代码的步骤吗?

在C / C ++中,char * arrayName 是指向指针的指针还是指向指针的指针?

我理解多维数组作为指针的指针,但也许我错了? 例如,我虽然: char * var = char var[] char ** var = char* var[]或char var[][] char *** var = char var[][][]或char* var[][]或char** var[] 这不正确吗? 我很困惑,因为我在简单的教科书示例中看到了char * [] []演员作为char **。 我粘贴了下面的例子。 任何人都可以为我清除这个吗? 谢谢! /* A simple dictionary. */ #include #include #include /* list of words and meanings */ char *dic[][40] = { “atlas”, “A volume of […]

如何获取结构数据的hexdump

…. finalize(char *hdrs, sendip_data *headers[], int index, sendip_data *data, sendip_data *pack) { …….. 出于调试目的,我想要data和pack结构的hex转储,其类型为sendip_data ,这是一个非常复杂的结构。 实际上它们包含一些二进制信息,所以我不确定我的项目的输出是否正确。 因此,出于调试目的,我想将数据写入文件,以便我可以使用hexdump,如下所示 – $hexdump -C file.txt 另外因为这是一个/ w数据包的运行时生成所以我也不确定data和pack结构的长度,我认为fread / fwrite将需要..所以请给我一些建议。

更改按值传递的指针

我给了一个函数foo(struct node *n) ,其中n是链表中的头节点。 现在foo应该改变它指向列表的末尾。 但这个function签名是否可行? 假设t是指向列表末尾的指针: n = t将无法工作,因为指针是按值传递的。 *n = *t不起作用,因为我会覆盖列表的头部。 我错过了什么?

这个C语句是什么意思?

我遇到过这一行: void (*(*x)(void (*[10])(int *)))(int *) 谁能告诉我它是什么?

在C下通过引用传递指针参数?

#include #include void getstr(char *&retstr) { char *tmp = (char *)malloc(25); strcpy(tmp, “hello,world”); retstr = tmp; } int main(void) { char *retstr; getstr(retstr); printf(“%s\n”, retstr); return 0; } gcc不会编译这个文件,但是在添加#include 我可以使用g ++来编译这个源文件。 问题是:C编程语言是否支持通过引用传递指针参数? 如果没有,为什么? 谢谢。

解除内存后,我们如何才能访问指针?

据我了解, free()用于释放我们之前使用malloc分配的内存。 在我的下面的代码片段中,我释放了我分配的内存。 但即使在释放后我也可以访问指针? 怎么可能? 内部免费如何运作? #include using namespace std; int main() { int *p=(int *)malloc(sizeof(int)); *p=17; free(p); *p=*p+1; printf(“\n After freeing memory :: %d “,*p ); return 0; }