我意识到了下面的问题。
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 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);
你会得到操作系统给你的地址。不像数组,不一定要连续。