Tag: 指针

C – 将指针数据保存/加载到文件

如果以前曾经问过这个问题,或者有一个我看不到的明显的解决方案,首先道歉。 我发现了一个类似的问题,但我相信我所要求的比前面提到的更进一步。 我的结构如下: typedef struct { int id; char *title; char *body; } journal_entry; 问:如何在不使用固定长度的情况下用C(而不是C ++)编写和加载指向内存的指针内容? 我错误地认为通过将title或body写入文件我会最终得到垃圾数据而不是实际存储的信息? 我不知道日记帐分录的title或body的大小,并且从入口到入口的大小可能会有很大差异。 我自己的阅读建议我需要取消引用指针并分别fwrite结构的每个部分。 但我不确定如何跟踪数据和结构,而不会让事情变得混乱,特别是对于较大的文件。 此外,如果这些不是我打算存储在文件中的唯一项目(例如,我可能希望稍后包含小图像,我不确定如何为了方便而订购文件结构。 另一个(可能是感知的)问题是我在加载数据时使用malloc为body / entry的字符串分配内存当我希望再次加载条目时,我怎么知道为字符串分配多少内存? 我是否需要扩展我的结构以包含int body_len和int title_len ? 非常感激地收到指导或建议。

C Char指针

让我们说我们有一系列指针: char *ptr[30]; 现在这个工作正常,似乎没有做任何意想不到的事情! 我可以轻松输入名字。 scanf(“%s”, ptr[1]); scanf(“%s”, ptr[2]); scanf(“%s”, ptr[3]); printf(“%s\n”, ptr[1]); printf(“%s\n”, ptr[2]); printf(“%s\n”, ptr[3]); 我的问题是,如果一个指针可以用这种方式来存储名称的结尾数,那么为什么要使用malloc呢? 在这种情况下,ptr [1]不指向输入中的字符,而是指向新输入本身。 例如,如果ptr有mukul,ptr [1]应该指向’u’,如果在指定这样的指针时没有分配空间,那么限制是多少?

递增指针(ptr ++)和(* ptr ++)

当我怀疑时,我正在重新审视指针。 int *ptr; int arr[5] = {10,20,30,40,50}; ptr = &arr[0]; 现在是printf(“Value: %d”,*ptr); 会打印10 如果我做: ptr++; printf(“Value: %d”,*ptr); 结果将是: 20 同样,如果我这样做: *ptr++; printf(“Value: %d”,*ptr); 结果是: 30 但 printf(“Value: %d”,++*ptr); 给了我31 我认为,因为当我递增它时, ptr是int类型,它会跳转4个字节到下一个内存位置。 但为什么它对*ptr++和ptr++显示相同的行为而不是++*ptr ?

指针和赋值,它如何与不同类型一起使用?

我正在通过了解一点Python来“自学”“学习C”。 我已经阅读了几个教程,但我无法理解指针和赋值是如何工作的。 我知道如果你取消引用指针,你可以直接给它一个值,如: int *anint = 42; 但是具体引用已经创建的变量的内存位置呢? 具体来说,我尝试过: char *pointer_to_strlit; char *strlit = “some stuff”; pointer_to_strlit = &strlit; 为什么在执行此操作后,以下内容会导致段错误: printf(“I print strlit: %s\nI print it again by pointing to it: %s\nI print where the pointer is pointing: %p\n”, strlit, *pointer_to_strlit, pointer_to_strlit); C中的类型似乎很难说明它们将如何表现以及如何使用指针来引用特定类型。 是否有明确的指南专门概述了指向每种不同数据类型的语法( char , *char , *char[] , int , struct , void […]

argv中指向字符串的指针是否可修改?

最近(2016年1月,如果问题持续时间足够长)我们有问题argv中的字符串是否可修改? 。 在这个答案的评论部分,我们(@ 2501和我)认为它是否真的是可修改的字符串 (例如**argv的示例字符)或指向字符串的指针 (示例指针是*argv )。 适当的标准报价来自C11标准草案N1570,§5.1.2.2.1/ 2: 参数argc和argv以及argv数组指向的字符串应由程序修改,并在程序启动和程序终止之间保留它们最后存储的值。 argv modifiable指向字符串的指针是什么?

二维数组和指针

我有以下代码片段: char board[3][3] = { {‘1′,’2′,’3’}, {‘4′,’5′,’6’}, {‘7′,’8′,’9’} }; printf(“address of board : %p\n”, &board); printf(“address of board[0] : %p\n”, &board[0]); 两个printf()语句都打印相同的值: 0x0013ff67 据我所知,board(ie)数组名称代表第一个子arrays(即) board[0]和地址 board[0]表示第一个数组中的第一个元素的地址(即) board[0][0] 为什么我在所有printf()语句中都获得相同的地址? 我希望两种语句都有不同的地址。 我对这些东西很新,并且不理解这种行为。 请赐教。

如何在Java中获得新的指针?

如何在JNA中使用C中的方法签名调用方法? int open_device(context *ctx, device **dev, int index); C方法的最后两行如下所示: *dev = pdev; return 0; 这是该方法中dev的唯一用途。 这意味着我必须将一个poiner传递给指向该方法的空指针,对吧? 然后该方法用device对象的地址填充空指针,我可以将指针传递给设备到其他方法。 我的问题是:这是正确的方法吗? 如果是,如何从Java分配新指针? 基于接受的答案,我这样做了: Memory p = new Memory(Pointer.SIZE); Memory p2 = new Memory(Pointer.SIZE); p.setPointer(0, p2); nativeLib.open_device(ctx, p, index); return p2;

当p指向数组时,为什么p和* p给出相同的地址?

我在写这个节目 – #include void main() { int arr[20]; arr[0]=22; arr[1]=23; int (*p)[20]=&arr; printf(“address in p :%u:\n”,p); printf(“address in *p:%u:\n”,*p); } 对于p和* p,此代码的输出相同! 据我所知* p持有arr的基地址,这只不过是arr [0]! 所以* p应该给出输出22! 但是它显示了与p一样的内存地址。 请告诉我为什么会这样? 它背后的原因是什么? 键盘站点链接: http : //codepad.org/LK7qXaqt

为什么我不能直接将int赋给int指针,如下所示:int * p = 6;?

错误:从“int”到“int *”的无效转换 int *q = 8; 工作良好。 *q = 6; 为什么我不能直接将int赋给int指针,如下所示: int *q = 6 ; 我可以在下一行安全地分配它吗?

将成员函数指针传递给c样式函数

我试图将成员函数指针传递给c风格的函数(因为它是C中的lib) 它想要的指针定义为: void (*)(int, const char*) 所以我试图传递的function是: void Application::onError(int error, const char *description) 我试图用这段代码传递: setCallback(bind(&Game::onError, this, placeholders::_1, placeholders::_2)); 这给了我以下错误: cannot convert ‘std::_Bind_helper<false, void (Application::*)(Application*, int, const char*), Application* const, const std::_Placeholder&, const std::_Placeholder&>::type {aka std::_Bind<std::_Mem_fn(Application*, std::_Placeholder, std::_Placeholder)>}’ to ‘GLFWerrorfun {aka void (*)(int, const char*)}’ for argument ‘1’ to ‘void (* glfwSetErrorCallback(GLFWerrorfun))(int, const char*)’ glfwSetErrorCallback(bind(&Application::onError, this, […]