c - 指针语法查询

标签 c pointers struct

我似乎无法理解以下指针符号之间的区别,有人可以指导我吗?

 typedef struct some_struct struct_name;
  struct_name this;
  char buf[50];
  this = *((some_struct *)(buf));

现在我试着玩了一下,做了上面的事情,比如:

  struct some_struct * this;
     char buf[50];
     this=(struct some_struct *)buf; 

就我而言,我认为这两种实现应该产生相同的结果,有人可以指导我两者之间是否存在差异,如果有,有人可以指出吗?

谢谢。

最佳答案

在您的第一个片段中,this 不是指针,它是 some_struct 的一个实例。您所做的分配对 buf 中的内容进行了浅拷贝(即 memcpy()),就好像它也是 some_struct 的实例一样。

在第二个片段中,this是一个指针,它只是指向buf的地址。

所以,基本上总结一下,第一个片段 this 不是指针,结构被复制到其中。在第二个中,它是一个指针并分配给与 buf 相同的内存(即不是副本)。

关于c - 指针语法查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9039461/

相关文章:

c - 是否有用于打印结构的 C 预处理器宏?

c - 使用结构数组中的字符串进行选择排序

c - 将增量应用于 C 中的三元运算符

c++ - C 预处理器扩展到另一个类似对象的宏

c - 字符串数组插入问题

将指针的值更改为c函数中的指针

c++ - 在分配之前传递分配的指针

c++ - 使用指向数组中元素的指针释放内存

c - 两个相互包含的结构体

c - 如何从其成员地址获取结构的起始地址