我意识到以下问题:
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] 删除。
我来说两句