1、请问答案为什么是a\?
如下程序的执行结果——
main(){ int i;char s="a\ \ \ \ \ n"; for(i=0;s[i]!='\0';i++) ; printf("%c",(s+i)); }
2、如下程序的执行结果——
main()
{static int a[]={1,2,3,4,5,6}; int*p; p=a; *(p+3)+=2; printf("%d,%d/n", *p, *(p+3) }
A 1,3 B 1,6 C 3,6 D 1,4
第一题,循环后面有个逗号,所以是打印的是'\0'字符
去掉这个逗号,那么打印的是 a\\
\是转义字符,两个\打印一个\
第二题,p=a就是p指针指向数组的首个元素,*(p+3)+=2;这一句是p指针右边第三个元素+2,也就是4+2
所以printf("%d,%d\n", *p, *(p+3));就是打印指针p所指向的值和指针向右移动3位所指向的值
用代码块格式化一下吧,*号都看不见
第一个输出应该是
a\\加上换行
因为\是转义字符,要输出\字符的话,就需要两个斜杠。所以 a\\\\\n实际是字符a,两个斜杠字符,以及一个\n换行符组成
最后printf输出数组第0个和第3个元素值,也就是1,6。所以选B
第二个中,p=a,使得p指向a数组首地址,*(p+3)+=2就是将数组第三个元素4的值加上2,就是6.
建议你将代码格式化一下,用csdn自带的代码编辑器。。然后再提问。。。。
其他的不说,你第一个程序居然能运行起来?char类型用字符串赋值?
假设你是少打了*符号,你的for循环就把i挪到了字符串结尾的下一个了,即\n后面的'\0'了,这个时候再输出printf("%c),只能是单个字符。
至于你的a\是怎么输出来的,你还是先把题目复制正确再来问吧