你在想什么-ya 发表于 2020-5-19 07:45:12

新手学C编程,向大家求助惹!

单个几条语句还凑活可以看懂,但是完整的程序放在一起就不知道要干嘛了呜呜呜
向好心人求助!哪位可以帮帮忙详细解释一下每一条语句的作用吗?

#include<stdio.h>
void main()
{
        int a[]={1,2,3};
        int *p=a,b;
        char *q="abcde";
        b=*++p;
        printf("%d%d%d%d%d\n",a,*a,*(a+2),*(p+1),p);
        printf("%d%d%c%s%s\n",q,*q,q,q+3,q);
}

永恒的蓝色梦想 发表于 2020-5-19 07:51:08

本帖最后由 永恒的蓝色梦想 于 2020-5-19 07:52 编辑

None

KevinHu 发表于 2020-5-19 08:34:46

现在用void main()不管用了,要用int main(),最后return 0;{:10_256:}

KevinHu 发表于 2020-5-19 08:46:01

#include<stdio.h>
int main()
{
      int a[]={1,2,3};// 定义一个有三个元素的数组a,分别存放1、2、3
      int *p=a,b;// 定义一个整形指针,赋值为a,也就是指向a数组的第一个元素(数组名就是指向数组第一个元素的指针);还有一个整型变量b
      char *q="abcde";// 定义一个字符数组(也可以理解为字符串),赋值为:“abcde”
      b=*++p;// 这里*和++的优先级一样高,结合性是右结合性,也就是从右往左,所以先计算“++p”,p现在变成了a数组的第二个元素的指针,再进行解引用,b也就是a数组第二个元素
      printf("%d%d%d%d%d\n",a,*a,*(a+2),*(p+1),p);// 这里我感觉有一点问题,第一个格式化操作符不应该是“%d”,而应该是“%p”,因为a是一个指针。这条语句会分别输出:a数组的第一个元素的地址、a数组的第一个元素(1)、a数组的第三个元素(3)、a数组的第三个元素(3)、a数组的第三个元素(3)。
      printf("%d%d%c%s%s\n",q,*q,q,q+3,q);// 这里我也感觉有一点问题,因为q不是整形变量,而是一个字符串,所以第一个格式化操作符应该是“%s”,而*q是字符数组的第一个元素,也就是a,a是一个字符,所以第二个格式化操作符应该是“%c”。这条语句会分别输出:abcde、a、d、de、abcde
        return 0;
}

DreamChaser 发表于 2020-5-19 09:09:40

受教了,谢谢

你在想什么-ya 发表于 2020-5-19 09:13:27

谢谢谢谢四楼,受教啦!现在明白了一些,但是输出或许是十进制的结果吗?刚刚老师讲的{:10_254:}非常感激大家!!

你在想什么-ya 发表于 2020-5-19 09:15:25

KevinHu 发表于 2020-5-19 08:46


谢谢你!
页: [1]
查看完整版本: 新手学C编程,向大家求助惹!