C语言实践小结

1.在任何函数中,第一次出现的变量,都必须要先声明他,例子如下:
调用函数中出现并声明了int a,b,c;但是在主函数main中又第一次出现abc,这种情况也 要在主函数里面声明清楚abc inta,b,c;
2.return结尾一定好加“;”
3.如果函数调用的话,且在调用函数中出现循环结构,同时需要用到循环结果的话,则必须在循环体中用上return+XX,如果无需用到结果则不加,但在函数结束}前一定要有return。例如:
#include <stdio .h >
int sanjiaoxing(int a,int b,int c)
{
if (a+b<=c || a+c<=b || b+c<=a)
{
printf ("不能构成三角形\n");
return 0;
}
else
{
int critf=a+b+c;
return critf;
}
}
int main()
{
int a,b,c;
a=10;
b=10;
c=15;
printf("三角形周长是%d",sanjiaoxing(a,b,c));
return 0;
}


4.对于for循环中的if条件判断句:
对于上述图片如果满足if条件判断语句,则执行到return index 就跳出整个函数,因此这样的代码存在错误,会发生还没有找到数字就提前跳出整个函数了,修改如下:
这样子如果满足if判断语句执行if的循环,尽管没有这个数字,还会进行for循环,直到for循环的表达式2不成立跳出循环。


5.数组作为函数参数的注意项:
上述定义时候必须是arr [] 不可以漏了[]

6。
红色标记不可以有,有的话执行错误
同样说法如下:
红色标记那里不可以加【】如果加的话[]里面有值

7.
for(i=0;i<10;i++)
{
all=0;
all=all+score[i];
}
printf("一共%d\n",all);
注意:在for循环里面不可以赋初值,因为for循环里面是执行循环的代码块,如果在里面赋值,那么每次循环后all都会有一个样的值,即0,故最后输出的不是求和值而是最后一位数的值。


8.赋值和等号注意
9.浮点数实际上都是有符号数,因此signed unsigned不能加在float和double之前,当然不存在有符号数与无符号数之间转化的问题。
10.C语言规定%只能用于int与char型变量,实际上char也属于整型
11.强制性转化错误写法
(int)3*a 正确应为(int)(3.*a)
12.要想显示%,必须在格式控制符中使用%%来代替单个%
13.char ch=‘A’
printf("%c",ch) 显示 A
printf("%d",ch) 显示ASCII代码
14.while((ch=getchar())!='\n')/*这里=的优先级比!=要低,所以要用括号讲ch=getchar()围起来 这里如果不加
\n的话,那么将会是死循环,所以必须加*/
15.在有求解的表达式中,需要用到递归的,则必须把递归函数放进表达式中去。
16.多重循环嵌套,这种循环一定要注意每一个循环变量是否和前面的大循环变量是否有联系,如果有,那一定要将两者联系起来
17.任何字符在编译器中都是ASCII码,所以直接赋值a为‘A',那a+1的值则是B。
18.任何整型也可以用于储存字符型数据
19.面对有EOF的循环,可以这样处理跳出循环:ctrl+z(另起一行,按回车结束);或者ctrl+c,关闭窗口结束程序。
20. 字符'0':char c = '0';   它的ASCII码实际上是48。内存中存放表示:00110000
字符'\0' : ASCII码为0,表示一个字符串结束的标志。这是转义字符。
整数0 :ASCII码为0,字符表示为空字符,NULL;数值表示为0;内存中表示为:00000000
21.制表符一般是8个空格
22. 通过二级指针调用指针数组(存字符串地址)时尤为小心
对于: char *str[]={"kimcho","micho"};
char **strings=str;
printf(“%c”,**++strings);//实际上打出来的是m,也就是说,二级指针的地址访问方法与二维数组类似,也是行存储型,所以想要打出kimcho中的i,就必须先选定行,再在这个行里面操作如:
printf(“%c”,*++(*strings))

23.const用法总结:
如果const与指针连用,当const用在指针前面时候也就是,char const *ch(表示,该指针指向的内容无法修改),如果当const用在指针后面时候也就是,char *const ch(表示,该指针的地址无法修改)

不严谨的讲,左值右值的区分在于位于等号的那一侧,左侧的是左值,通常是一个变量,右侧的是右值,可以是一个变量,或者是一个表达式。
表达式由一个或多个操作数通过操作符组合而成。最简单的表达式仅包含一个字面值常量或变量。较复杂的表达式则由操作符以及一个或多个操作数构成。  例如:-i就是一个表达式

a和&a指向的是同一块地址,但他们+1后的效果不同,a+1是一个元素的内存大小(增加4),而&a+1增加的是整个数组的内存
大小(增加40)。既a和&a的指向和&a[0]是相同的,但性质不同!

26.当一个指针指向NULL时,指针自身的地址为0
当一个指针指向一个空字符串时,指针自身的地址不一定为0

27.对于if(*point++ == *substr++)
这种判断,每次程序执行到这一步时,里面的判断条件语句都会执行,不管判断是否成立,也就是point的值都会+1,同理substr

28.break语句是跳出循环,对判断语句无影响
29.scanf函数的返回值是正确按照格式输入的参数的个数,如:scanf(“%c%c”,&a,&c),则该函数的返回值是2
30.
我们能常在用到 sizeof 和 strlen 的时候,通常是计算字符串数组的长度
看了上面的详细解释,发现两者的使用还是有区别的,从这个例子可以看得很清楚:
char str[20]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 计算字符串的长度,以结束符 0x00 为字符串结束。
int b=sizeof(str); //而b=20; >>>> sizeof 计算的则是分配的数组 str[20] 所占的内存空间的大小,不受里面存储的内容改变。
上面是对静态数组处理的结果,如果是对指针,结果就不一样了
char* ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的之所占的空间,应该是长整型的,所以是4//?
sizeof(*ss) 结果 1 ===》*ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位
strlen(ss)= 10 >>>> 如果要获得这个字符串的长度,则一定要使用 strlen
sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
总结:
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;
char* ss = "0123456789";
sizeof(ss) 结果 4 (注意指针和数组名在这里的作用不一样
31.对于二维数组,其数组名不可以直接赋值给一个指针变量,如果该指针变量为航指针变量则可以直接赋值,对此,对二维数组的元素引用根据一般指针变量和行指针变量方法可以分为:
A. 一般指针变量:
必须要用 *(p+i*n+j)//n表示列数,p为指针
B.行指针变量:
可以用 p[ i ] [ j ]
*(*(p+i)+j)
32.对数组的大小的定义只能是常量表达式,不可是变量,例如:
int i=3; int arr[i];//这样是错误的
33.NULL和NUL的区别:
NUL 是ASCII 字符集中 '\0' 字符的名字 ,它的字节模式为全 0。NULL 指一个其值为 0 的指针。它们都是整型值,其值也相同,所以它们可以互换使用。
0和'\0'的值都是0,但是'0'的值是48
34.printf函数输出 '\0'的形式是一个空格
35. int a[10];  a ,&a和&a[0] 都是分别是什么?先说明 a ,&a和&a[0]三个值是的相等哈
36.二进制数在计算机中是以补码的形式存在的,对一个数进行求原码,补码,反码,他们的符号位都不变,但是如果求的是按位取反,那么符号位就要变
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值