在C语言中,作为结构成员的数组的指针算子。

问题描述 投票:0回答:1

我意识到了下面的问题。

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来跳转,谁能解释一下,为什么我要从下一行开始时要多跳一个,如果要从第三行、第四行等开始,我怎么做?

c pointers pointer-arithmetic
1个回答
2
投票

当你分配指针的时候,你会得到操作系统给的地址。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.