二级指针输出以及循环输出求助
为什么我的这个程序,这么写输出的时候少输出一个字母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循环那个地方
求大神给指点
还有如果能德华能顺道说一下,为什么二级指针循环哪里需要减一呢,我只是通过实验弄成减一是可行的,但是原理我我从网上没有查到什么还请大神给指点 指针自增的问题
实际输出时应该先输出再自增,而不是先自增再输出
为什么需要-1
因为循环体内的自增操作会将指针指向下一个字符 首先,你这个写法就很有问题,应该说是不能这样写的。还是给你解释一下,第一个程序:**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-22 16:14
首先,你这个写法就很有问题,应该说是不能这样写的。还是给你解释一下,第一个程序:**ing 指向 “shi”字 ...
为什么你这个指针地址可以传给指针呢?*ing = ing; 奥普瓯江 发表于 2017-11-23 12:32
为什么你这个指针地址可以传给指针呢?*ing = ing;
因为它们都是地址,你可以将他们看成一个int(其是它的本制就是一个unsigned int), int (*ing) 和 int ing,是不是可以直接赋值呢?
页:
[1]