关于数组指针的问题:

seraphimpk 2006-10-20 12:35:54
int a=[1, 2, 3]; //定义数组
int (*p)[3]; //定义指向整型数组的指针
int *ptr; //定义指针

p = a; //指向数组a
ptr = a; //指向数组a 这个和p=a有什么区别??

cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl; //这两句都是输出3,代码里区别是怎么产生的呢?

谢谢大家了
...全文
358 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
weijiangshanwww 2006-10-20
  • 打赏
  • 举报
回复
差不多
seraphimpk 2006-10-20
  • 打赏
  • 举报
回复
指向数组的指针。指针值为数组的地址!

==================================================
嘿嘿,‘天气预报’的这句话掷地有声,拨云见日啊。

是不是理解为:*p是数组的地址,而ptr直接就是数组的地址了?

完了,我觉得现在越学越差劲了
ctu_85 2006-10-20
  • 打赏
  • 举报
回复

int a=[1,12,23]; //定义数组
int (*p)[3]; //定义指向整型数组的指针
int *ptr; //定义指针

p = a; //指向数组a
ptr = a; //指向数组a 这个和p=a有什么区别??

cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl;
麻烦看看
seraphimpk 2006-10-20
  • 打赏
  • 举报
回复
结果是多少啊?
=============================
越界了,应该,得到一个毫无意义的值
ctu_85 2006-10-20
  • 打赏
  • 举报
回复

估计错了
===========================
嘿嘿,是我举例没举好

结果是?
ctu_85 2006-10-20
  • 打赏
  • 举报
回复
不明中
糊涂了
weijiangshanwww 2006-10-20
  • 打赏
  • 举报
回复
指向数组的指针。指针值为数组的地址!
seraphimpk 2006-10-20
  • 打赏
  • 举报
回复
cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl;
====================
第一个是先取到数组的地址,因为是指向数组的指针,然后再从数组中取数
第二个直接指向了数组地址,所以取一次就可以了!

=====================================================
不是很明白,猜一下:*p是取数组的地址?那p又是什么呢?
seraphimpk 2006-10-20
  • 打赏
  • 举报
回复

估计错了
===========================
嘿嘿,是我举例没举好
weijiangshanwww 2006-10-20
  • 打赏
  • 举报
回复
cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl;
====================
第一个是先取到数组的地址,因为是指向数组的指针,然后再从数组中取数
第二个直接指向了数组地址,所以取一次就可以了!
ctu_85 2006-10-20
  • 打赏
  • 举报
回复
结果是多少啊?
ctu_85 2006-10-20
  • 打赏
  • 举报
回复

估计错了
ctu_85 2006-10-20
  • 打赏
  • 举报
回复
cout<<*(*p+2)<<endl;
改为
cout<<*(*p+10)<<endl;
看看结果是什么
我没编译器
估计是11
seraphimpk 2006-10-20
  • 打赏
  • 举报
回复
表示p指向数组a的地址
在这段代码中是一个意思
========================================
那为什么之后的语句要得出相同的结果,表现形式却差了一个*:
cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl;
ctu_85 2006-10-20
  • 打赏
  • 举报
回复
int (*p)[3]; //定义指向整型数组的指针
表示p是一个指针变量,指向一个包含3个整型元素的一维数组
ptr = a; //指向数组a
表示p指向数组a的地址
在这段代码中是一个意思
seraphimpk 2006-10-20
  • 打赏
  • 举报
回复
cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl; //这两句都是输出3,代码里区别是怎么产生的呢?
========================================================
因为数据组织的格式不一样,所以访问的方式不一样。

========================================================
兄弟,具体是什么区别呢?*p对于ptr来说可是又取了一次值啊
weijiangshanwww 2006-10-20
  • 打赏
  • 举报
回复
cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl; //这两句都是输出3,代码里区别是怎么产生的呢?
========================================================
因为数据组织的格式不一样,所以访问的方式不一样。
lw1a2 2006-10-20
  • 打赏
  • 举报
回复
int a[]={1, 2, 3}; //定义数组
int (*p)[3]; //定义指向整型数组的指针
int *ptr; //定义指针

p = &a; //指向数组a
ptr = a; //指向数组a 这个和p=a有什么区别??

cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl; //这两句都是输出3,代码里区别是怎么产生的呢?
weijiangshanwww 2006-10-20
  • 打赏
  • 举报
回复
int a=[1, 2, 3]; //定义数组
int (*p)[3]; //定义指向整型数组的指针
int *ptr; //定义指针

p = a; //指向数组a
ptr = a; //指向数组a 这个和p=a有什么区别??
=====================================================
都是可指想数组的。
但是因为指针类型不一样,所以指针内的数据组织格式不一样。(但数据都一样)
seraphimpk 2006-10-20
  • 打赏
  • 举报
回复
ctu_85(青灯照壁人初睡,冷雨敲窗被未温)

#include<iostream>

using namespace std;
int main(){

int a[3]={1,12,23}; //定义数组
int (*p)[3]; //定义指向整型数组的指针
int *ptr; //定义指针

p = &a; //指向数组a
ptr = a; //指向数组a 这个和p=a有什么区别??

cout<<*(*p+2)<<endl;
cout<<*(ptr+2)<<endl;

system("PAUSE");
}

得到的结果是23,23
编译器是dev-c++

69,368

社区成员

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

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