请教一个指针问题,多谢

ufxcom 2006-11-15 02:04:34
有这样的定义
char fileName[][20]={"aa","bb","cc","dd" };

如何再定义一个指针指向fileName指向的地址,并能像使用fileName一样使用这个新定义的指针。
...全文
209 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmqmjy 2006-11-15
  • 打赏
  • 举报
回复
char **当然不行
要实现p[i][j]指向正确的元素,要看p的类型

首先,p[i]实际上等效于*(p+i),(完全等效)

再者,指针加1的操作不同于int或char的加1操作
int或char等类型加1,就是值加1,
而指针加1,会根据指针的类型加上一个值
这个值的大小是根据类型来定的
比如说
char *pc;
int *pi;
int **ppi;
对于这三个变量pc+1实际上是pc的值加上1(因为一个char占1位)
而pi+1实际上是pi的值加4,一个int占四字节(编译器不同也有可能不同)
而ppi+1其实是ppi的值加4,因为32位机的指针占4字节

第三点要明白的是,C没有真正的二维数组
C里面的多维数组其实都是一维数组,只不过指针不同
像char fileName[][20]={"aa","bb","cc","dd" };其实也就一个一维数组
只不过指针fileName类型是char (*)[20],
操作fileName[i][j]实际指向哪个元素呢
因为fileName是char(*)[20],这是一个数组指针,数组为char [20]
所以该数组指针的元素(即数组)长度为20*1=20
因而,fileName[i]其实是*(char**)((int)fileName+20*i)
得到的是一个char*,所以fileName[i][j]其实是*(char*)((fileName[i])+j)
也就是*(char*)((int)fileName+20*i+j)
因而也就能指向所谓的"二维数组"的第[i,j]个元素

搞清楚上面三点,这问题就不难了
ufxcom 2006-11-15
  • 打赏
  • 举报
回复
mmqmjy(莫名其妙) ( ) 信誉:100 Blog 2006-11-15 14:13:45 得分: 0


char (*p)[20];


是对的, char **不行。
飞哥 2006-11-15
  • 打赏
  • 举报
回复
要一个一个指好像
一楼哪个行
慕容一一 2006-11-15
  • 打赏
  • 举报
回复
char** ppfileName = fileName;
对不对?
mmqmjy 2006-11-15
  • 打赏
  • 举报
回复
char (*p)[20];

64,676

社区成员

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

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