免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: smallchilli
打印 上一主题 下一主题

想不通的C问题(未解决) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-04-13 23:30 |只看该作者
恩,我应该加个在表达式中^_^

论坛徽章:
0
12 [报告]
发表于 2007-04-13 23:35 |只看该作者

回复 9楼 smallchilli 的帖子

>> int a[3];
>> a 表示的是指向数组的第一个元素的指针 类型是 int*
a的类型是数组类型,即int[3],而不是int*
只是很多时候,在使用数组名时数组名能自动转换为指向其第一个元素的指针(这儿即int*),如作为函数调用的参数、赋值给其元素类型的指针

论坛徽章:
0
13 [报告]
发表于 2007-04-14 11:00 |只看该作者
那个POINT明显是个指针的指针.

char**point;
char a[20];
*point = a;
*point里面存 的是个地址.
所以;
char b[10][20];

point  = &b[8];  //b[8]也是个地址.
所以

*point 为b[8];
*((*point)  + 10) 指向b[8][10]了.

论坛徽章:
0
14 [报告]
发表于 2007-04-14 16:09 |只看该作者
原帖由 smallchilli 于 2007-4-13 13:15 发表
int zj[10][20];
int (*point)[20];
point=&zj[8];
*((*point)+10)=20;

point指针指向的是一个数组,这里是zj二维数组第九个元素(数组),*point表示的应该是指向zj二维数组第九个元素(数组)的第一个元素 ...


你既然知道了point是指向一个有20个元素,每个元素是int型的数组的指针。那就应该知道*point就取出了point指针的值,也就是数组的首地址。那么,首地址+10是不是就是数组中第10个元素的地址? 这样清楚了吗?
另外对于怎么理解这些概念,我有一个建议。画一下zj[10][20]在内存中是怎样存放的,再标出每个指针的位置。
搞清楚数据如何在内存上如何存放,就不会被这些看似复杂的东西混淆了。当然,还要理解c语言中加指针时,指针移动的步长规则。

[ 本帖最后由 zx_wing 于 2007-4-14 16:15 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2007-04-14 17:02 |只看该作者
建议LZ先将基础知识掌握牢固(此处别无他意,牢固的基础会使你不断受益)
其实有些东西认识看看定义,仔细想想就有眉目了
你以后提问问题,可能还会遇到不明确的答复,
但是绝对没有人,至少在这里不会,故意
给你一些不负责任的回答

祝在学习过程中,不断超越自我!!
:em11::em11:


BTW:其实我也看不懂,你问的是什么意思。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP