31,2,3 int i for(i 0 i3 iprintfd t",i

2020-12-02 13:48:10 字数 5342 阅读 2258

1楼:金色潜鸟

这是c语言的奇葩之一。

i[a] 和 a[i] 通过编译后产生的可执行码 是一样 的。

所以 打印出 1 2 3i[a] 在c 语言中 不是标点符号,而是 “运算符”(奇葩)此运算 等价于 *(i+a)

于是a[i] 在c 语言中 不是标点符号,而是 “运算符”(奇葩)此运算 等价于 *(a+i)

这样 一来 *(i+a) 和 *(a+i) 是 一样 的 啦

(在高级c语言课程中谈及此问题)。

2楼:匿名用户

个人觉得是a[i]应该是写错了。

3楼:匿名用户

写错了吧!!!我觉得应该是a[i]吧!!!不然应该输出一段乱码(虽然没测试)

以下程序的运行结果是() main() { int a[3]={1,2,3}; int *num[3]; int **p,i; for(i=0;i<3;i++) num[i

4楼:匿名用户

应该是输出1。程序是这样的,先定义

了一个数组a,并赋值。然后定义了一个指针数组sum。在for循环中,使用了

num[i]=&a[i];语句,也就是,指针数组的每个元素分别指向了数组a的每个元素。前面定义的p,是指向指针的指针,也就是p指向了一个地址,而这个地址又执行了另外一个地址。执行p=num后,p就 指向了num数组的第一个元素。

后面使用printf(“%d”,**p);输出的时候,实际上就是输出了数组a 的第一个元素,就是1。

int i;int a[3][3]={1,2,3,4,5,6,7,8,10};for(i=0;i<3;i==)printf("%d",a[2-i][i] 5

5楼:匿名用户

应该是inti;

inta[3][3]=;

for(i=0;i<3;i++)

printf("%d",a[2-i][i]);

这样i = 0 1 2

输出 a[2][0] a[1][1] a[0][2]也就是右上到左下的对角线值

输出值为357

s=0 void f1() { int k=1; s=s+k; k++; } for(i=1;i<3;i++) fl() printf("%d\n",s) 5

6楼:匿名用户

将字符串t插入字符串s中start开始的位置这个函数写的不好,一是可能会存在数组越界的问题,二是s[start]位置的字符好像没有向后移动,直接被覆盖了用一个新的字符串来合并两个字符串会更好一点

int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]<5); for(i=0;i<5;i++) printf("%d",a[i]);求详细解

7楼:匿名用户

while前的括号打反了?

程序并不会出问题, 因为第一次循环a[i++];执行后, i = 1; while条件中先++i, 导致i = 2, 而a[2] < 5 条件是不成立的, 直接跳出了do {} while循环. 执行for循环遍历打印a数组.

这里如果a = 就出问题了, 正好把a[3]=5跳过去了, 会再次进入循环, 结果是数组越界了. 结果就不一定了, 越界后如果那段内存不可读, 程序就崩溃了, 如果可读读则读到一个随机值, 正好是大于5的, 也就碰巧出循环了.

a[i]++ ?

那分析是这样:

第一次: a[i]++; 此时a[0] = 4; i = 0;

while (a[++i] < 5); 此时i = 1, 判断的是a[1] < 5, 条件成立

第二次:a[i]++; 此时a[1] = 5; i = 1;

while (a[++i] < 5); 此时i = 2; 判断的是a[2] < 5, 条件不成立, 跳出循环.

数据变成45543, 我已运行确认是这结果, 跟你的结果不一样, 看看是不是**还输入错了.

8楼:匿名用户

#include

intmain()

;do//do..while();循环,先执行一次循环体

while(a[++i]<5);//第一次来判断4<5成立了,继续循环第二次。。以下省略

for(i=0;i<5;i++)//循环5次printf("%d\n",a[i]);//输出a[i]的值,也就是把a中的所有值都输出一遍了

return0;

}希望能帮助你,望采纳。

9楼:

int i=0,a=;//数据的定义并初始化do while(a[++i] < 5) //执行一步a[i++],然后判断a[++i] 是否大于5,大于5则执行下面的语句,否则,继续循环;唯一要区别的是 i++,是先把i用了在把i+1;++i是先把i+1,再使用i;

//do {}while()是先执行循环体后,后进行条件检查,而while(){}是先检查条件后执行;

for(i=0;i<5;i++)

printf("%d",a[i]);

//就是从数组第一个位置(或者说成0号位置)开始顺序打印出这个5个元素,打印的格式是 整形10进制

10楼:匿名用户

当中那个花括号什么啊,这不就是把这个数组输出吗,do a[i++];while (a[++i]<5);这个循环没有意义吧

main() { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) *(p+i)=i+1; printf("%d \n",a[1][2]); }

11楼:匿名用户

#include

main()

其中p=&a[0][0]; 就是取二维数组的首地址(二维数组占用的内存空间是线性的)

for(i=0;i<9;i++) *(p+i)=i+1; 就是给这个二维数组赋值,也就是

a[0][0]=0+1,a[0][1]=1+1,a[0][2]=2+1,a[1][0]=3+1,a[1][1]=4+1,a[1][2]=5+1。。。。。。

所以答案是6

12楼:匿名用户

main()

//输出结果是6;这里主要的知识是数组知识。数组不管是几维,在内存中都是一维的,这么说,二维数组可以认为是这样一种一维数组,而这个一维数组的每一个元素都是一维数组,就是这样。以2维数组为例,数据其实是按a[0][0],a[0][1],a[0][2],。。。。

a[2][2]存储的。另外数组名也是指针,指向数组的第一个元素,数组括号里面的数就是从首地址偏移的位置。a[3]=*(a+3)就是这个意思。

所以p[i]=*(p+i);也就是从a[0][0]偏移i个元素。而数组元素按照之前所说顺序进行排列。所以可以得出a[1][2]是第6个元素,也就是从a[0][0]偏移了5(a[0][0]是第一个元素),所以a[1][2]=*(p+5);p[5]=5+1=6;所以a[1][2]=6.

不明白可追问。

13楼:

for(i=0;i<9;i++)

*(p+i)=i+1;

将二维数组看作一维数组,a[1][2]即相当于a[5]*(p+0)=1 即a[0]=1

*(p+1)=2 即a[0]=2

*(p+2)=3 即a[0]=3

*(p+3)=4 即a[0]=4

*(p+4)=5 即a[0]=5

*(p+5)=6 即a[0]=6

int a[4]={1,2,3,4}; int i,j; for(int i=0;i<4;i++) for(int j=0;j

14楼:匿名用户

for循环在不加大括号的时候,只执行后面的一条语句。

一条语句并不是一行,两个分号“;”之间是一条语句。所以你这个程序的两个for是嵌套的,相当于:

for(inti=0;i<4;i++)

{for(intj=0;j

现在你明白了为什么在后面加上其他语句只会输出一个了吗?

所以,写for循环和if循环之类的语句,一定要加上大括号。这样,逻辑更清晰,也方便阅读**和改错。

c程序 int main() { int x[3][2],i; for(i=0;i<3;i++)

15楼:匿名用户

for(i=0;i<3;i++)

这个分别会给x[0] x[1] x[2]赋值,而x[0]就是x[0][0]的地址,x[1]是x[1][0]的地址,x[2]是x[2][0]的地址。

因此你输入的三个数2 4 6分别赋值给了x[0][0] x[1][0] x[2][0]。

但是x[0][1]没有人赋值,是一个随机值。

main() { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++) p[i]=i; for(i=0;i<3;i++) printf("%d ",a[1][i 5

16楼:廖北伯

p指向 a[0][0], 所以

*p和a[0][0]一样, 也与 p[0]一样.

但c/c++是 row-major 的排法,a[0][0], a[0][1], a[0][2] 之後紧接者 a[1][0], a[1][1], ...., 最後是 a[2][2].

所以 p[1]和a[0][1]一样, p[2]和a[0][2]一样, p[3]和a[1][0]一样

....

p[8]和a[2][2]一样.

for(i=0;i<9;i++)将这九个数依序设为0,1,2,3,...,8

for(i=0;i<3;i++)印出中间的三个值3,4,5

17楼:

int a[3][3],*p,i; //定义变量p=&a[0][0]; //指针p指向a的首地址

for(i=0;i<9;i++)

p[i]=i; //循环赋值,p[0]即a[0][0],p[1]即a[0][1]以此类推

for(i=0;i<3;i++)

printf("%d ",a[1][i]); //循环打印,输出a[1][0],a[1][1],a[1][2]这3个数据值

18楼:匿名用户

输出的结果应该是:3 4 5

for(int i0 in-2 if

1楼 匿名用户 这个就是斐波那契数列 f f1 f2 f1 f2 f2 f 这三部操作就是把,原f2的值给新f1 原f1和原f2的和给新f2f1,f2的初值都是1,经过一次这样的操作就变成了1 2 然后是2 3 3 5 5 8 8 13 最后返回的结果就是斐波那契数列的第n项的值 2楼 匿名用户 就...

(2+2i1+3i)的极坐标形式,详细过程

1楼 匿名用户 z 2 2i 1 3i 2 2i 1 3i 4 2 6 2 6 i 4 z 2 1 16 2 6 2 2 6 2 1 8 2 6 1 z 1 argz arctan 2 6 2 6 arctan 2 6 6 2 4 arctan 2 6 6 2 4 arctan 8 4 3 4 ar...

你好,想问关于G470AL i3 2370m的几个问题

1楼 爱卡 尊敬的联想用户您好! g470有2个内存条槽,一般其中有一个是空的,可以添加内存。 更多问题您可以咨询 idea论坛 http lenovobbs lenovo forum php think论坛 http thinkbbs lenovo forum php 联想乐社区 http bbs...