二级指针的问题(毕业论文答辩题目)--急!

gwy2583281 2006-06-09 09:59:26
各位老大:
由于毕业论文答辩的需要,现有两个问题,需要请教!
1、二维数组的数组名代表的指针是什么类型?
2、用指针实现数组元素的访问的几种方式是什么?

期待……
...全文
266 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanchuang 2006-06-09
  • 打赏
  • 举报
回复
1、二维数组的数组名代表的指针是什么类型?
--------------
怎么都感觉这个问题有问题,呵呵

2、用指针实现数组元素的访问的几种方式是什么?
-------------
*(p + i)
p[i]
[i]p
MagicCarmack 2006-06-09
  • 打赏
  • 举报
回复
学习楼上的
修改一下

1、二维数组的数组名代表的指针是什么类型?
=============================================
数组名字,
无论数组是多少维的,
数组名都只是一个 一级指针,
如:
int arr[10][10];
int *p=arr; //一级指针赋值


sarh2os 2006-06-09
  • 打赏
  • 举报
回复
int a[10];的数组名类型 int*
指针访问方法:
int *b = a;
a[i]类似于*(b+i)
int a[10][20];的数组名类型是int (*)[20]
指针访问方法:
int (*b)[20] = a;
a[i][j]类似于*(*(a+i)+j)
jixingzhong 2006-06-09
  • 打赏
  • 举报
回复
2、用指针实现数组元素的访问的几种方式是什么?
======================
说起来就两种:
一种是 * 号获取,
一种是 [] 获取,

其他的就是通过这两种的组合而已 ...

换算公式: p[i] = *(p+i)
所以,对2维的元素 p[i][j],
可以有如下变形:
(*(p+i))[j]
*((*(p+i))+j)

实际上在编译后,p[i] 访问 元素的方式就已经被优化为*(p+i)的指针方式了 ...
jixingzhong 2006-06-09
  • 打赏
  • 举报
回复
1、二维数组的数组名代表的指针是什么类型?
=============================================
数组名字,
无论数组是多少维的,
数组名都只是一个 一级指针,
如:
int arr[10][10];
int *p=a; //一级指针赋值
king820802 2006-06-09
  • 打赏
  • 举报
回复
错了,应该是*(a+4)
king820802 2006-06-09
  • 打赏
  • 举报
回复
错了,应该是a + 4
king820802 2006-06-09
  • 打赏
  • 举报
回复
1、还是这个数组分配内存的首地址
2、
int a[8]
a[0] 就是 a+0
vanillahill 2006-06-09
  • 打赏
  • 举报
回复
二维数组还是比较麻烦的
首先数组和指针是两种C++的类型,在使用一维数组的时候可以把数组转化为指针,二维的话可以这样用:
int a[50][60];
int *p = a;
//在取用a[i][j]时,可以用:
int c = p[60 * i + j];
lucky_huastar 2006-06-09
  • 打赏
  • 举报
回复
百度上搜寻的解答,大家仔细参考一下!

数组名并不是指针,两者是不同的,把数组名称为指针是最常见的错误之一。
int *p=a;这样写之所以是错误的,原因是与a相对应的pointer type是int(*)[4],而p的类型是int*,类型不相容,不能这样赋值。a如果这样定义:
int arr[6],跟a相对应的pointer type是int*,这时候就可以p=arr;
注意:
别把我上面说的“与a相对应的pointer type”理解成a的类型是pointer type,NO!
a的类型是array type,int a[4][4],根据C标准规定的conversion of array type to pointer type规则,一个表达式中的数组名除了作为sizeof和&的操作数的情况外,会产生一个地址,同时这个地址的类型会由a的array type转换为pointer type,“相对应的pointer type”指的这个pointer type,不是a的类型。

这个就解释得详细了,楼主明白了吧?
lucky_huastar 2006-06-09
  • 打赏
  • 举报
回复
在DEVC++里调试通过。高手解释一下。
#include <iostream>
#include <cstdlib>

using std::cout;
using std::endl;
int main()
{
int a[4][4] = {{1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}};
int (*p)[4]=a;

cout<<*(*(p+1)+2)<<" "<<**(p+3)<<endl;
system("pause");
return 0;
}

调试,运行通过。
得到:3 1
观察**(p+3)=1,那么p是指向指针的指针。
但是如果定义 int **p = a;,又是错误的!!!!!!!!!!编译都通不过。

所以a是指向一维数组的的指针。
Jedimaster 2006-06-09
  • 打赏
  • 举报
回复
1 指针的指针
2 声名的地址加上偏移
声名指针变量运用指针算术获取

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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