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

Pointer arithmic for arrays which are members of a struct in 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); 

你得到操作系统给你的地址。不像数组,不需要连续。