鱼C论坛

 找回密码
 立即注册
查看: 2222|回复: 6

[已解决]新手学C编程,向大家求助惹!

[复制链接]
发表于 2020-5-19 07:45:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

#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[1]);
        printf("%d%d%c%s%s\n",q,*q,q[3],q+3,q);
}
最佳答案
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[1]);  // 这里我感觉有一点问题,第一个格式化操作符不应该是“%d”,而应该是“%p”,因为a是一个指针。这条语句会分别输出:a数组的第一个元素的地址、a数组的第一个元素(1)、a数组的第三个元素(3)、a数组的第三个元素(3)、a数组的第三个元素(3)。
        printf("%d%d%c%s%s\n",q,*q,q[3],q+3,q);  // 这里我也感觉有一点问题,因为q不是整形变量,而是一个字符串,所以第一个格式化操作符应该是“%s”,而*q是字符数组的第一个元素,也就是a,a是一个字符,所以第二个格式化操作符应该是“%c”。这条语句会分别输出:abcde、a、d、de、abcde
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-19 07:51:08 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-5-19 07:52 编辑

None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-19 08:34:46 | 显示全部楼层
现在用void main()不管用了,要用int main(),最后return 0;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[1]);  // 这里我感觉有一点问题,第一个格式化操作符不应该是“%d”,而应该是“%p”,因为a是一个指针。这条语句会分别输出:a数组的第一个元素的地址、a数组的第一个元素(1)、a数组的第三个元素(3)、a数组的第三个元素(3)、a数组的第三个元素(3)。
        printf("%d%d%c%s%s\n",q,*q,q[3],q+3,q);  // 这里我也感觉有一点问题,因为q不是整形变量,而是一个字符串,所以第一个格式化操作符应该是“%s”,而*q是字符数组的第一个元素,也就是a,a是一个字符,所以第二个格式化操作符应该是“%c”。这条语句会分别输出:abcde、a、d、de、abcde
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-19 09:09:40 | 显示全部楼层
受教了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 09:13:27 | 显示全部楼层
谢谢谢谢四楼,受教啦!现在明白了一些,但是输出或许是十进制的结果吗?刚刚老师讲的非常感激大家!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 09:15:25 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 17:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表