指针与数组问题,访问方式怎么这样的?

BeerGates 2008-07-08 11:54:23

可能通过指针引用数组元素。假设p已定义为一个基类型为整型的指针变量,并已将一个整型数组元素的地址赋给了它,使它指向某一个数组首元素。
int a[10]={22,3423,55,64,345,2324,566,34553};
int *p = a;

for(int i = 0 ; i < 10 ; i ++)
{
cout<<p[i]<<endl;//这里应该输出它的地址,怎么是输出地址内容呢?
cout<<*(p+i)<<endl;//这句和上句应该差不多吧?*(p[i])可以写成这样吧,或者*p[i]
cout<<*(a+i)<<endl;//
cout<<a[i]<<endl;
}
...全文
168 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbger 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 BeerGates 的回复:]
p[i]

但这样没理由是一个值吧?

应该是指针地址变量啊?

不明白。
[/Quote]

p[i]跟a[i]一样,只不过是编译器在编译的时候把它认作变量而已。
地址的表示方法是&P[i];
jy01807853 2008-07-09
  • 打赏
  • 举报
回复

//兄弟你也说*p指向了数组的首元素
//数组名就是一个const指针,你用数组名进行下标操作可以访问到数组的元素 a[1]
//为什么p[i]不可以了?


//cout<<*(p+i)<<endl;//这句和上句应该差不多吧?*(p[i])可以写成这样吧,或者*p[i]
//你前面一句是对, 这句是和上面一样的效果, 但是后面错了
//*(p[i])可以写成这样吧,或者*p[i]
//我猜了下楼主你的意思是 在取出值然后在进行解引用吧 后者也一样
//但是这样不行你这两种方法都是非法的间接,你可以自己试下
#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int a[10]={22,3423,55,64,345,2324,566,34553};
int *p = a;
int i;
i = (*p[1]);

}
BeerGates 2008-07-09
  • 打赏
  • 举报
回复
p[i]

但这样没理由是一个值吧?

应该是指针地址变量啊?

不明白。
dbger 2008-07-09
  • 打赏
  • 举报
回复
这是std的cout做的转换而已,其实指针跟数组对于内存来说是没区别的。
tangtang02520 2008-07-09
  • 打赏
  • 举报
回复
LZ可能是没弄清楚 [] 这个操作符的意义
[]操作符实际上是“变址运算符” 将a[i]按a+i计算地址,然后找出此地址单元中的值
对于指针p也一样 指向数组的指针变量也可以带下标,p[i] 与 *(p+i)等价
tangtang02520 2008-07-09
  • 打赏
  • 举报
回复
把[]看做是下标运算符是为了更好理解数组元素值与数组下标的关系
实际上是变址运算符,把它看做变址运算符可以更好地理解数组元素在内存中的存储方式
LZ可以看一下微机原理中的有关寻址方式的内容

p+i和a+i就是a[i]的地址,即&a[i]
*(p+i)和*(a+i)是p+i或a+i所指向的数组元素,即a[i]
*p[i]???没见过
BeerGates 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tangtang02520 的回复:]
LZ可能是没弄清楚 [] 这个操作符的意义
[]操作符实际上是“变址运算符” 将a[i]按a+i计算地址,然后找出此地址单元中的值
对于指针p也一样 指向数组的指针变量也可以带下标,p[i] 与 *(p+i)等价
[/Quote]

[]这是不是下标运算符吗?

不太清楚了,p[i]这样等于a[i]这样?晕了。p是指针变量啊?如果*p[i]应该得不到所指向的内容吧。
iBug168 2008-07-08
  • 打赏
  • 举报
回复
书...

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧