一.字符串+转义字符+注释
1.字符串
#include<stdio.h>
int main()
{
char arr1[] = "abc";
char arr2[] = {'a', 'b', 'c'};
char arr3[] = {'a', 'b', 'c', '\0'};
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
打印的结果为
经过调试后arr[1]的结果为a b c \0
经过调试后arr[2]的结果为abc烫烫烫烫烫烫烫烫烫烫烫烫烫烫蘟bc
经过调试后arr[3]的结果为a b c \0
arr[2]之所以会出现这种情况是因为字符串的结束没有\0,打印abc后出现烫烫是打印的随机值直到遇到\0才会停下来。
想求字符串的长度用strlen库函数,前提在前面应该加一个#include<string.h>
strlen是计算\0之前出现的字符的个数
arr1和arr3中有\0所以字符串的长度为3
arr2的长度之所以为35是因为是随机值,一个不确定的值,再次执行后,就不一定是35了,是因为\0的位置,直到遇到\0后才能算出它的字符串长度 。
2.转义字符
转义字符 |
释义
|
\?
|
在书写连续多个问号时使用,防止他们被解析成三字母词
|
\'
|
用于表示字符常量
'
|
\“
|
用于表示一个字符串内部的双引号
|
\\
|
用于表示一个反斜杠,防止它被解释为一个转义序列符。
|
\a
|
警告字符,蜂鸣
|
\b
|
退格符
|
\f
|
进纸符
|
\n
|
换行
|
\r
|
回车
|
\t
|
水平制表符
|
\v
|
垂直制表符
|
\ddd
|
ddd
表示
1~3
个八进制的数字。 如:
\130 X
|
\xdd
|
dd
表示
2
个十六进制数字。 如:
\x30 0
|
还有%d 打印整型
%c 打印字符
%s 打印字符串
如果只想打印双引号,应该是printf("%s","\"");
如果只想打印单引号,应该是printf("%c","\"");
3.注释
代码中有不需要的代码可以直接删除,也可以注释掉 。 代码中有些代码比较难懂,可以加一下注释文字
#include <stdio.h>
int Add(int x, int y) {
return x+y; }
/*C语言风格注释
int Sub(int x, int y)
{
return x-y;
}
*/
int main()
{
//C++注释风格
//int a = 10;
//调用Add函数,完成加法
printf("%d\n", Add(1, 2));
return 0; }
关键字static
一.static修饰局部变量
在上述代码中,结果为什么是10 个6呢?
刚开始a被赋值为5,经过a++后a为6,打印出第一个6,因为i=0且小于10,所以i++,则i=1,再次返回函数test,因为a=5是局部变量,在运行void test后,生命周期也就结束了,局部变量a就被销毁,当i=1;a还是被赋值为5,经过a++,a为6且被打印出来,循环下去,就是打印出10个6
加上关键字static后,使变量a成静态局部变量,使静态局部变量a出了局部范围后不会被销毁,生命周期变长了,但作用域没有发生变化。下一次进入函数依旧存在,是因为:static修饰的局部变量存在静态区,a运行1次后为6,再次循环后,没有被销毁,所以a经过a++后,经打印为7,以此循环下去,结果是从6到15.
二.static修饰全局变量
sttatic2中想要用sttaic'3中的g_val的值,得用到一个关键字extern(用来声明外部符号)
这样就成功了,这就相当于偷用sttaic3中的代码,那怎么能防止别人偷盗呢?
这时候就用到static 关键字了
这时候就开始报错了,说明static修饰的全局变量使全局变量只能在内部使用。
全局变量本来就具有外部链接属性,但被static修饰后,外部链接属性变成内部属性,只能在自己的源文件内使用,不能被其他文件使用。相当于static用来防止其他文件来偷东西。
从感觉上显得作用域变小了!
用static修饰函数和用static修饰全局变量一样。
关键字#define 定义常量和宏
#define+变量名(一般都是大写)+内容
当然不一定是整型,字符串也行
#define 定义宏
就不用单独再写一个函数,直接用#define定义的宏