C语言大一新生,求详解
C语言大一新生,求详解
C语言大一新生,求详解
C语言大一新生,求详解
通过代码测试,输出的字符串如下所示:
y
my
mmy
ummy
Yummy
测试如下:
参考链接:
C语言| 字符串数组,看这一篇就够了! - 知乎
一、字符串的定义 char *str1 = {"Hello world!"}; // 方式一 (可省略{}) char str2[] = {"Hello world!"}; // 方式二 (可省略{}) char str3[] = {'H', 'e', 'l', 'l…
https://zhuanlan.zhihu.com/p/377633216
#include <stdio.h>
#include <string.h>
int main(void){
// https://zhuanlan.zhihu.com/p/377633216
// 定义字符数组food,数组名food指向数组第一个元素的地址
char food[] = "Yummy";
char *ptr;
// 将字符指针ptr赋值为字符数组中字符串最后空字符的地址
// food是数组第一个元素的地址,即food[0]的地址,strlen(food)的值为5,是字符数组中字符串的长度
// 所以food+strlen(food),可以用&food[5]来表示,即字符数组空字符的地址
// food[0] [1] [2] [3] [4] [5]
// 'Y' 'u' 'm' 'm' 'y' '\0'
ptr=food+strlen(food);
// while循环的条件,首先字符指针ptr自减1,然后判断字符指针ptr是否大于等于food
// 如果ptr大于等于food,则循环输出ptr指向的字符串,否则退出循环
// 这里while循环共循环五次,具体如下:
// 第一次,ptr=&food[5],然后--ptr, ptr变为&food[4],即指向倒数第一个字符'y',然后往后打印直到空字符结束,即打印出:y
// 第二次,ptr=&food[4],然后--ptr, ptr变为&food[3],指向倒数第二个字符'm', 往后打印到空字符结束,即打印出:my
// 第三次,ptr=&food[3],然后--ptr, ptr变为&food[2],指向倒数第三个字符'm', 往后打印到空字符结束,即打印出:mmy
// 第四次,ptr=&food[2],然后--ptr, ptr变为&food[1],指向倒数第三个字符'u', 往后打印到空字符结束,即打印出:ummy
// 第五次,ptr=&food[1],然后--ptr, ptr变为&food[0],指向倒数第三个字符'Y', 往后打印到空字符结束,即打印出:Yummy
// 第六次,ptr=&food[0],然后--ptr, 此时ptr变为(food-1),小于food,while循环条件不满足,退出while循环
//int i=5;
//printf("ptr=%x,food=%x,food[%d]=%x,%c,%d\n",ptr,food,i,&food[i],food[i],food[i]);
while(--ptr>=food){
// i--;
// printf("ptr=%x,food[%d]=%x,%c,%d\n",ptr,i,&food[i],food[i],food[i]);
puts(ptr);
}
// i--;
//printf("ptr=%x,food[%d]=%x,%c,%d\n",ptr,i,&food[i],food[i],food[i]);
return 0;
}