新手入门遇到的小问题

、经学习了c语言的基本概念之后,SunnyByte就开始上手写代码了,接触的第一串基础代码就是

#include <stdio.h>
int main()
{
return 0;
}

那么SunnyByte就想了,为什么一定要 “return 0” 呢,输入“return 1” 或者 “return 2” 甚至 “return 其他” 可不可以呢?

经查阅相关资料后了解到:“return”后面可以跟任意合法整型,并非只能是0,不过从实际运用场景来看,有明确的约定:

1.“return 0”是C语言中通用的规范,代表程序正常执行结束,没有异常错误。

2.“return 非0整型”通常表示程序异常终止。

、对于SunnyByte这样非计算机专业自学的小白来说 ,在学习打印字符亦或者创建变量初期时,会出现这样的问题

#include <stdio.h>
int main()
{
printf("a");//这里到底是用''还是""呢?、
char arr1 = 'a';//这里也是,到底用的是''还是""呢
for(exporession)//函数后面到底加不加 ;呢
return 0;
}

问题1和2:需要写"a" ,因为printf的参数是字符串,C语言中字符串必须用双引号包裹;而单个字符用单引号包裹。

那么有的小白可能会和SunnyByte有同样的疑问了----哎,这里printf里面的是单字符啊,这又怎么理解呢。

可以这么理解printf的参数里的"a",本质上是“长度为1的字符串”,a的后面默认跟着一个'\0'

#include <stdio.h>
int main()
{
printf("a\0");
return 0;
}

如果说,我就想单字符用单引号,字符串用双引号,那么就以特定格式打印

#include <stdio.h>
int main()
{
printf("%c", 'a');
printf("%s", "abcdef");
return 0;
}

问题三:函数后面“加不加 ; ”,那就要看你要做什么,一般分为“函数声明、函数定义和函数调用”。

1.函数声明,需要加 ' ; '。什么是函数声明呢?也就是告诉编译器这个函数是什么样(只写函数的外观——返回值、函数名、参数),不写具体怎么实现(告诉编译器有这么一个函数)。此时需要加 ' ; '。

int expre(int a , int b);//告诉编译器“expre 是一个接收两个 int ,返回值类型为int 的函数”

2.函数定义。不需要加' ; ' 。函数定义不仅要写函数的外观,还要写函数的聚体逻辑。

int expre(int a , int b)//定义:既说明了函数(外观),又写了具体的计算逻辑
{
return a+b;
}

3.函数调用,需要加 ' ; '。把定义好的函数调用起来。

#include <stdio.h>
int main()
{
int expre(int a , int b);//声明函数
int expre(int a , int b)//定义函数
{
return a + b;
}
int sum = expre(6,7);//调用expre函数,把6与7的和13存到sum里面
return 0;
}

、SunnyByte在自主学习"i++"和"++i"时无意涉及函数压栈知识。相信不少新手小白也和SunnyByte一样被其所困。

#include <stdio.h>
int main()
{
int a = 5 + 1 - 2;
int b = 1 + 1 + 1 + 1;
printf("%d\n%d\n", a , b);
printf("%d\n%d\n", a++, b = a++);
printf("%d\n%d\n", ++a, b = ++a);
return 0;
}

SunnyByte最初的预期打印结果为“ 4 4 5 4 5 5”,可实际运行结果为“ 4 4 5 4 8 7”。很纳闷,明明没有刻意去给a和b赋值,只是在printf里面对其表达式进行打印,为何最后的++a和b会等于8和7呢?

我们都知道,a++和++a都会让a的值自增1的,这种自增即便放在printf里面也会影响a下一次打印的值,在调用函数的时候,参数一般是从右边往左边传递的。

#include <stdio.h>
int main()
{
int a = 5 + 1 - 2;
int b = 1 + 1 + 1 + 1;
printf("%d\n%d\n", a , b);//a和b正常加减运算
printf("%d\n%d\n", a++, b = a++);//从右边开始,a先赋值给b再加加,b等于4,a等于5;a先打印5再加加变为6
printf("%d\n%d\n", ++a, b = ++a);//a先加加变为7再赋值给b;最后a先加加变为8后再打印
return 0;
}

看到这相必各位小白也和SunnyByte一样了解了整个变化过程,不过要想了解其根本原因,需要深入学习函数压栈的相关知识。SunnyByte还在学习中,暂不能给出答案。

好了,今天的分享就到这里,如果对你有帮助或者你觉得有趣,那就点个赞关注一下叭!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值