奥普瓯江 发表于 2017-11-22 15:01:15

二级指针输出以及循环输出求助

为什么我的这个程序,这么写输出的时候少输出一个字母s
#include<stdio.h>
9 #include<stdlib.h>
10
11
12 int main(void)
13 {
14         char *ing;
15         char *name = "shi";
16         char *fers = "jinl";
17         char *hello = "nishi";
18         char *nnw = "nihao";
19         char *haod = "woshi";
20
21         ing = name;
22         ing = fers;
23         ing = hello;
24         ing = nnw;
25         ing = haod;
26
27
28         while (**ing - 1 != '\0')
29         {
30               *(*ing)++;
31               printf("%c", **ing);
32         }
33
34         return 0;
35 }


这么写却不会少输出s呢
int main(void)
13 {
14         char *ing;
15         char *name = "shi";
16         char *fers = "jinl";
17         char *hello = "nishi";
18         char *nnw = "nihao";
19         char *haod = "woshi";
20
21         ing = name;
22         ing = fers;
23         ing = hello;
24         ing = nnw;
25         ing = haod;
26
27
28         while (**ing - 1 != '\0')
29         {
30               printf("%c", *(*ing)++);
31         }
32
33         return 0;
34 }

这里面更改的地方是while循环那个地方
求大神给指点
还有如果能德华能顺道说一下,为什么二级指针循环哪里需要减一呢,我只是通过实验弄成减一是可行的,但是原理我我从网上没有查到什么还请大神给指点

BngThea 发表于 2017-11-22 15:48:28

指针自增的问题
实际输出时应该先输出再自增,而不是先自增再输出
为什么需要-1
因为循环体内的自增操作会将指针指向下一个字符

上善若水··· 发表于 2017-11-22 16:14:20

首先,你这个写法就很有问题,应该说是不能这样写的。还是给你解释一下,第一个程序:**ing 指向 “shi”字符串中的第一个字符‘s’,
所以**ing - 1并没有什么意义,循环不会退出,*(*ing)++后,这时**ing 指向“shi”中的第二个字符'h',后面才printf,所以第一个程序不会显示字符‘s’;第二个程序可以打出's',是因为*(*ing)++会在printf之后执行。给你个实现的代码吧。
for (int i = 0; i < 5; i++)
        {
                *ing = ing;                       
                while (**ing != '\0')
                {
                        printf("%c", *(*ing)++);
                }
                printf("\r\n");
        }

奥普瓯江 发表于 2017-11-23 12:32:27

上善若水··· 发表于 2017-11-22 16:14
首先,你这个写法就很有问题,应该说是不能这样写的。还是给你解释一下,第一个程序:**ing 指向 “shi”字 ...

为什么你这个指针地址可以传给指针呢?*ing = ing;

上善若水··· 发表于 2017-11-24 09:25:01

奥普瓯江 发表于 2017-11-23 12:32
为什么你这个指针地址可以传给指针呢?*ing = ing;

因为它们都是地址,你可以将他们看成一个int(其是它的本制就是一个unsigned int), int (*ing) 和 int ing,是不是可以直接赋值呢?
页: [1]
查看完整版本: 二级指针输出以及循环输出求助