结构和指针算法
structures and pointer arithmetic
#include <iostream>
#include <cmath>
using namespace std;
struct demo{
int one;
int two;
int three;
};
int main()
{
demo d1;
demo *dptr=&d1;
*dptr=1 ;
++dptr;
*dptr=2;
++dptr;
*dptr=3;
return 0;
}
请解释为什么上面的代码看起来合乎逻辑,但实际上不起作用在代码的第 13 行中。日志错误:
与 '
*dptr=1
' 中的operator=
' 不匹配
demo d1;
demo *dptr=&d1;
*dptr=1 ;
++dptr;
dptr=2;
++dptr;
dptr=3;
dptr
是指向demo
结构的指针。所以,*dptr = 1
基本上和d1 = 1;
一样,这是无效的。
另外,拥有该类型的指针并在该指针上执行++
将应用该类型的指针算术,将指针推sizeof(demo)
,这不是您想要的。您需要通过强制转换来创建一个int
指针,然后使用该指针读取 3 个字段
int* dptr=reinterpret_cast<int*>(&d1);
但是,填充仍然会毁了您的一天,因为它们都是int
的,您应该没事。
您需要
将dptr
声明为 int*
,而不是 demo*
。
int *dptr=&d1; // might need type cast (int*)
*dptr=1 ;
相关文章:
- 使用指针算法修改函数中的 2D 数组
- 通过指针算法计算数组长度
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- 由于指针算法错误,代码在 memcpy 中崩溃
- 在 c++ 中使用指针算法
- 通过指针算法访问结构数据成员
- 使用字符** argv 时如何避免指针算法
- 通过指针算法调用结构的结构属性
- R-->cpp 如何让C++指针与 sourceCpp (Bellman Ford 算法)
- 是什么让这种易失性打破了结构的指针算法?
- 使用指针算法调用结构内的结构数组
- USACO 牛障碍赛:迪尼克的算法/对指针未注册的更改
- 指针算法:*p++ 和 (*p)++ 等等
- 指针算法是否适用于迭代器?
- 你不能在 void 指针上使用指针算法,那么 void 指针数组是如何工作的呢?
- 使用指针算法搜索 2D 数组
- 未检测到越界指针算法?
- 指针似乎迷失在递归算法中
- 为什么这种递归子集和算法会导致指针分配错误
- 分类算法和对象指针的问题