第1个回答 推荐于2018-02-27
c 语言 p[i] 中 的中括号 [] 不是标点符号,而是 地址 “运算符”(C 语言奇葩之一)。
p[i] 地址 等于 p+i
执行下面语句,可以看看,它们是地址,两种计算方法得到的一样吧!
double p[]={1,2,3,4};
int i;
for (i=0;i<4;i++) printf("%u\n",p+i);
for (i=0;i<4;i++) printf("%u\n",&p[i]);
----------------------
语句里 指针前加个星号,就是 该地址里存放的 数值。
语句里 p[i] 表示 是 &p[i] 地址 里的 值。
语句里 *(p+i) 是 p+i 地址里存放的 数值.
上面计算知道 指针 p+i 和 &p[i] 地址 一样。
他们的数值 p[i] == *(p+i)
-------------------
c 语言里,实质上只有 一维数组(多维,通过[]运算,还是1维),而指针是没有分配存储单元的一维数组,或者说一维数组是分配了存储单元的指针。
上面例子,为简单起见,直接写 double p[]={1,2,3,4};
愿意 写 声明 double a[]={1,2,3,4}, *p; 语句: p = &a[0]; 或 p=a; 都可以。本回答被提问者和网友采纳
第3个回答 推荐于2016-02-19
c语言p[i]中的
中括号[]不是标点符号,而是 地址 “
运算符”。
p[i] 地址等于 p+i
执行下面语句
double p[]={1,2,3,4};
int i;
for (i=0;i<4;i++) printf("%u\n",p+i);
for (i=0;i<4;i++) printf("%u\n",&p[i]);
语句里,指针前加个星号,就是该地址里存放的数值。
语句里,p[i]表示是&p[i]地址里的值。
语句里 *(p+i)是p+i地址里存放的数值.
上面计算知道指针p+i和&p[i]地址一样。
他们的数值p[i] == *(p+i)
c语言里,实质上只有一维数组(多维,通过[]运算,还是1维),而指针是没有分配存储单元的一维数组,或者说一维数组是分配了存储单元的指针。
上面例子,为简单起见,直接写 double p[]={1,2,3,4}。