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