讲解C语言真题

我分析的答案是:CDDC。

首先要理解的是字符指针数组*s[4],它指向这四个字符串的第一个地址。

比如S[0]存储的是第一个字符串“tree”的第一个字符‘t’的地址,但应该理解为在内存中。

它们是这样储存的:

S[0]指向字符' t '的第一个地址,这意味着S[0]存储字符' t '的内存地址。但是不要。

我忘记了字符串结束符' \ 0 '会自动加在字符串的末尾。如果你不理解这首曲子

也可以在早期的C语言书上读到这一块的内容。

分析程序:

(1)?我?=?0;?p2 = S[0];?p1?=?p2?+?0;?

这里说明一下,字符指针P1和P2都指向字符‘t’,* p 1 = * p2 =‘t’。

执行while循环时,满足循环条件,*p2=*p1,也就是把*p1的值赋给*p2,因为它们都是。

指向字符“t ”,所以不要改变它的值。然后p1++,p2++,这意味着p1和p2都指向下一个字符' r '

仍然没有改变。诸如此类。当p1和p2都指向字符' \ 0 '时,while循环结束,然后执行。

*p2 =' \ 0 ',但*p2已经等于' \ 0 ',所以保持不变。

那就是说我。=?0for循环结束一次,字符串“tree”没有改变。

(2)?我?=?1;p2 = S[1];?p1?=?p2?+?1;?

执行一个while循环,第一个循环明显是*p2?=?*p1,因为*p1='l ',*p2='l ',也就是把内存中的' f '改成' l '。执行p1++,P2 ++内存变化如下:

与交换赋值类似,指针移动到下一位,while循环结束。

还有很重要的一点需要提醒。while循环结束,但*p2='\0 '。

p2指向的值将被赋值为' \0 '。p1?=?p2?+?我;还应注意P1指针的移动。

p1指向哪个字符?

在C语言中,如果字符串中有' \0 ',那么输出字符时只会输出' \ 0 '之前的字符。

例如,如果输出字符串“ass\0s\0”,结果将是“ass”。

(3)我?=?2?3,这里就不分析了,同上。