C语言的小问题~~

1,若有定义语句:inta[4][10],*p,*q[4],则错误赋值的是:p=a.为什么呢?a代表的是这个二维数组的开始的地址,为什么将值赋给p就不对呢?q[i]=a[... 1,若有定义语句:int a[4][10],*p,*q[4],则错误赋值的是:p=a.
为什么呢?a 代表的是这个二维数组的开始的地址,为什么将值赋给p就不对呢?
q[i]=a[i];这个 赋值为什么又是对的呢?一个是指针一个是数组元素。。。不明白啊,

2有以下程序:
#include<stdio.h>
main()
{ int n=2,k=0;
while(k++&&n++>2);
printf("%d %d\n",k,n);}

运行的结果是1 2。
麻烦大家解释一下哦,我不知道为什么算出来答案就是 1 3 嘿嘿,谢谢了
展开
 我来答
microbaby233
2010-09-16 · 超过63用户采纳过TA的回答
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:144万
展开全部
1。a是二维数组的首地址,其类型是int**,p的类型是int*,不同,不能赋值
q[i]是int*,a[i]也是int*,是可以赋值的

2。
由于k++返回的是自增前的值,即0,为假,直接跳转,也就不再执行后面的自增了,所以是2
你在调试时可以打开汇编窗口,代码如下:

4: while(k++&&n++>2);
00401036 mov eax,dword ptr [ebp-8]
00401039 mov ecx,dword ptr [ebp-8]
0040103C add ecx,1
0040103F mov dword ptr [ebp-8],ecx
00401042 test eax,eax
00401044 je main+49h (00401059)
00401046 mov edx,dword ptr [ebp-4]
00401049 mov eax,dword ptr [ebp-4]
0040104C add eax,1
0040104F mov dword ptr [ebp-4],eax
00401052 cmp edx,2
00401055 jle main+49h (00401059)
00401057 jmp main+26h (00401036)

00401042行是进行比较
0040104C行进行自增
然而在00401044行就先行跳转了
百度网友2d7fc00e3
2010-09-15 · TA获得超过497个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:120万
展开全部
我讲的通俗点:
1、int a[][] 是二维数组;a要赋值给p,p的类型必须是 int **;
a[i]是二维数组的第i维地址, 类型为int *;q为指针数组,也就是存放了4个成员,这4个成员都是一维的地址(int*);
因此a[i]和q[i]都是int *类型,可以赋值;
2、while(k++&&n++>2);此循环,条件是用&&连接的两个判断语句,程序执行的时候先判断第一个语句是否正确,如果真确再判断第二个,如果错误,此条件已经不成立了,所以不会继续执行后续的判断语句;
while的条件是这样,if的条件也是这样判断的;又因为k++在遇到语句结束才会自加,判断时k为0;条件已经不成立,n++>2不会执行;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式