是C中结构成员的数组的指针算术

攻击力

我意识到以下问题:

struct S{
   double **A;
 }
 struct S s;
 s.A = (double **) malloc(sizeof(double*)*2);
 s.A[0] = (double *) malloc(sizeof(double)*3);
 s.A[1] = (double *) malloc(sizeof(double)*3);

现在让我们说我想对进行指针运算s.A如果我先定义一个指向double的指针,例如:

double ptr
ptr = &s.A[0][0];

我希望

*(ptr+1) 相当于 s.A[0][1]

*(ptr+2) 相当于 s.A[0][2]

*(ptr+3) 相当于 s.A[1][0]

我意识到这*(ptr+3)不等于s.A[1][0]并指向错误的地址。指向s.A[1][0]我需要做的*(ptr+4),所以跳1。有人可以解释为什么当我要从下一行开始时,我需要跳一个额外的步,以及如果我必须从第三,第四开始时该怎么做?等行?

比兹字节

当您在以下位置分配指针时:

s.A[0] = (double *) malloc(sizeof(double)*3);
s.A[1] = (double *) malloc(sizeof(double)*3); 

您将获得操作系统所提供的地址。不像数组,它不必是连续的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章