两个c语言问题,二维数组,指针,字符串。急!!!

1.书上说:第i行第j列元素a[i][j]地址的表示方法有:a[i]+j,*(a+i)+j,&a[i][0]+j,&a[i][j]。第1,3,4种的表示方法我懂,但是第二... 1.书上说:第i行第j列元素a[i] [j]地址的表示方法有:a[i]+j,*(a+i)+j,&a[i] [0]+j,&a[i] [j]。第1,3,4种的表示方法我懂,但是第二种*(a+i)+j的表示方法我就不明白了。*(a+i)不是代表一个值吗?怎么后面还可以加上j来用作指针?两个不是一个概念呀。

2.若string表示一个字符数组或一个字符指针,则可以用:printf("%s\n'',string);表输出字符串的内容。但是string要是一个字符指针的话,那么它存放的不是字符串的首地址吗?输出的也应该是字符串的首地址,怎么能输出字符串呢?
展开
 我来答
hgsunxiaolin
2013-02-22
知道答主
回答量:9
采纳率:0%
帮助的人:5.9万
展开全部
1、*(a+i)里面的确是一个值,但是在二维数组中,a[i][j]中的a[i]表示的是第i行的地址,所以这个值其实是一个地址,那么*(a+i)+j 就可以表示第i行第j列的地址。
其实,你还可以这样看,a是地址,a+i是地址,*(a+i)是该地址里面存储的地址,指向第i行。
2、因为你用的%s输出的,string的确是一个字符串的首地址,他会根据首地址一直往下读,直到读到'\0'为止!
改变世界的魔法师
2013-02-11 · TA获得超过681个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:106万
展开全部
1.你可以把*(a+i)+j分解为a[i]+j,就像你说的,a[i]不是应该是一个值,怎么加还可以加一个j得来用作一个数的表示一样。这就说明一个道理,不论是a,还是a[i],其实在编译器看来都是一个指向内存中的指针。编译器可已经知道a是一个二维数组的指针,所以他会把a[i]和*(a+i)当指针地址来看,而不会当成一个数来看,如果数组在定义的时候是一维数组,比如定义成a[i],那这个时候*(a+i)可能就是a[i]的值了。
2.你在printf中写的是%s,就是让把地址中的值以字符串输出的。你是这样要求的,当然编译器就这么作了,你要是用%i输出的话,你看到的可能就是string的指针地址值了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjfaok
2013-02-11 · TA获得超过6805个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1548万
展开全部
1.指针存储的也是一种值,但这个值被解释成地址,指针本身在内存中也有自己的地址,因此会有指向指针的指针……
2.你传给printf字符串的首地址,函数就能顺藤摸瓜地找到整个字符串的值(因为字符串在内存中是连续的,并且有一个确定的值'\0'作为结尾),%s的意思就是让函数这样找……
追问
能就第二种具体说明一下吗例如*(a+0)+3表示数组元素a[0] [3] ,那么(a+0)表示的是第0行的首地址*(a+0)表示第0行第一列的值,那他再加个3就是第一个元素的值再加3,而不是使指针向后移动不是吗?(a+0)表示什么?*(a+0)表示什么?
追答
(a+0)表示的是第0行的首地址,*(a+0)表示第0行的值(即a[0])……因此*(a+0)得到的也是一个指针……
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7c532e2
2013-02-14 · 超过21用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:43.9万
展开全部
*是指针运算符,运算对象是地址编号,数组名和指针变量都是地址编号。
“printf("%s\n'',string);”改为“printf("%d\n'',string);”就可以看到地址编号了!
字符串的操作和数组的操作与普通的变量是有点不一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xu84403451
2013-02-11 · 超过25用户采纳过TA的回答
知道答主
回答量:197
采纳率:0%
帮助的人:136万
展开全部
1: 你既然理解了1,3,4就好办了,*(a+i)==a[i],2就这么理解

2:你可以理解为c语言的规定,%s输出的是string指针所指向的内容,你想输出地址值可以用%u或%d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式