找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1642|回复: 4

[求助]请教一个关于指针的问题

[复制链接]
发表于 2009-11-5 01:12:50 | 显示全部楼层 |阅读模式 IP:江苏扬州
int main( )
{ int a[2][3]={11,15,19,21,25,29};
int *p;
p=a[0];
cout<<"a="<<a<<endl
<<"a[0]="<<a[0]<<endl
<<"p="<<p<<endl
<<"*a="<<*a<<endl
<<"*a[0]="<<*a[0]<<endl
<<"*p="<<*p<<endl
return 0;}
执行上面这段代码,结果为:
a=0012FF68
a[0]=0012FF68
p=0012FF68
*a=0012FF68
*a[0]=11
*p=11

如上所示,a 既然是数组的首地址,那么 *a 就应该是对数组a首地址的取值,即 *a应该是11,可为什么结果中*a还是数组a的首地址?
发表于 2009-11-5 01:12:51 | 显示全部楼层 IP:江苏扬州
把a相象成一个一维数组 包含2个元素 a[0],a[1],而每个元素a[n]自身又包含3个元素

p=a[0]; //是把这个数组的地址赋给p

*p或者*a[0] 就是a[0]中的第一个元素值 .*p+1 是a[0]数组中第二个元素的值 ...

*(p+1) 就是a[1]中的第一个元素的值

你的疑问是 *a 是怎么回事 ,因为a是个包含着数组元素的数组,所以本身不是一个单独的整形的值 ,而是一个数组 所以*a 是地址 也就是首地址

就是说 a是指向这个大的一维数组的地址 而*a 是指向这个大的一位数组中第一个元素(因为是数组)的地址
回复

使用道具 举报

发表于 2009-11-5 01:12:52 | 显示全部楼层 IP:江苏扬州
#include<iostream>
using namespace std;
int main( )
{ int a[2][3]={11,15,19,21,25,29};
int *p;
p=a[0];
cout<<"a="<<a<<endl
<<"a[0]="<<a[0]<<endl
<<"p="<<p<<endl
<<"**a="<<**a<<endl
<<"*a="<<*a<<endl
<<"*a[0]="<<*a[0]<<endl
<<"*p="<<*p<<endl;
cout<<typeid(*a).name()<<endl; //查看*a的类型,下同
cout<<typeid(**a).name()<<endl;
cout<<typeid(a).name()<<endl;
return 0;
}
可以看到*a 的类型是 int *,**a 才是int.也就是说**a的值才是11.
回复

使用道具 举报

发表于 2009-11-5 01:12:53 | 显示全部楼层 IP:江苏扬州
还是二楼的比较容易理解
回复

使用道具 举报

发表于 2009-11-5 01:12:54 | 显示全部楼层 IP:江苏扬州
记住一点就行了,2维数组实际上是不存在的,所谓2维数组就是数组的数组!

所以a[3][4];

int (*p)[4] = a;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 09:39 , Processed in 0.322296 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表