第一个c程序

认识第一个C语言程序:

#inlcude <stdio.h>
#include <stdlib.h>
int main()
{
printf("hehe\n");//printf用于在标准输出下打印信息
}

一、在写程序的过程中我们通常需要添加注释,有两种注释规则:
/* */和//
/* */这是c注释风格,可以注释多行代码,但是不支持嵌套。
//是c++注释风格,只能注释一行代码,我们推荐使用//。
mian函数是c程序的入口,在一个程序中只能含有一个main函数。

int main()
{
     char s1[] = "hello world";//一串字符用“”括起来
     char c = 'a';//单个字符用‘’括起来
     printf("%s\n", s1);
     printf("%c\n", c);
     system("pause");
     return 0;
}

二、下面讲解转义字符 的使用:
先来看一段小代码:

int main()
{
     printf("(are you ok ??)\n");
     system("pause");
     return 0;
}

我们的目的是输出(are you ok ??),但是经过编译发现输出的是:(are you ok ]’这是怎么回事呢?这里涉及了三字母词的知识(vs中不支持三字母词)。


所以为了输出我们想要的字符形式,我们引入了转义字符的概念

int main()
{
     printf("(are you ok \?\?)\n");
     system("pause");
     return 0;
}

这样输出的就是(are you ok??)。
介绍一些常用转义字符:

需要注意的是\ddd,和\xddd,下面就一个小代码进行分析:

int main()
{
     printf("\130\n");//X
     printf("\x050\n");//P
     system("pause");
     return 0;
}

\ddd是三位八进制数据,需要将其化为十进制,再转换为相应的acsii码值。
\xddd是三位十六进制数据,需要将其化为十进制,再转换为相应的acsii码值。

int main()
{
     printf("%d\n", strlen("hello"));//5
     printf("%d\n", strlen("c:\test\45\test.c"));//13
     system("pause");
     return 0;
}

由之前介绍的,我们很容易就能知道以上这个程序的输出结果。
三、数据类型

strlen:字符串的长度,遇到\0结束。
sizeof:字符串占内存的大小,包括\0所占的空间。
*有一个小知识点:\0和字符0是不一样的,\0一串字符串的结束标志,它的ascii码值为0,而字符0的ascii码值为48。
四、变量
一个变量的值是会发生变化的,一个简单的小程序:

int main()
{
     int num = 0;
     num = 10;
     printf("%d", num);
     system("pause");
     return 0;
}

num的值可以被改变。
C语言中,当一个变量被const修饰时,它依然是变量,但是它具有了常属性,不能轻易被改变。

int main()
{
     const int num = 0;
     num = 10;
     system("pause");
     return 0;
}

写出这样的代码会编译出错。

int main()
{
     volatile const int num = 0;
     int *p = &num;
     *p = 10;
     printf("%d\n", num);//10
     system("pause");
     return 0;
}

当我们使用volatile修饰被const修饰的变量的时候,我们就可以改变被const修饰的变量的值。原因是当一个变量被const修饰时,它很有可能被存储在寄存器中,这样可以提高访问效率。我们改变的是数据在内存中的值,就算改变了,寄存器是改变不了变化的,所以结果就不会改变。但是加上volatile就可以改变这个状况。
由此,我们可以知道volatile的作用:将数据存放在内存中,保证内存的可见性(可以用来改变被const修饰的变量的值)。
在c语言中被const修饰的变量叫做常变量,但还是变量。
在c++中被const修饰的变量的就是常量。
所以一下C语言程序是错误的

int main()
{
     const int size = 10;
     int arr[10];
     int arr[size];//错误写法,被const修饰的变量还是变量(c语言中)
}

变量的分类:局部变量和全局变量
局部变量:变量出现在代码块内部称为局部变量,生命周期:进入局部范围开始生命周期,出了这个范围,声明周期结束。作用域:代码块范围内。
全局变量:出现在所有代码块之外称为全局变量。生命周期:是整个工程的生命周期。作用域:在整个 工程之内。
局部变量
num就是一个局部变量

void test()
{
     int num = 0;//局部变量
}
int main()
{
     int num = 10;
     system("pause");
     return 0;
}

全局变量
num是全局变量

int num = 0;
int main()
{
     int num = 10;
     system("pause");
     return 0;
}

看这样一个代码:

void test()
{
     int num = 0;
     num++;
     printf("%d\n", num);
}
int main()
{
     int i = 0;
     for (i = 0; i < 10; i++)
     {
          test();
     }
     system("pause");
     return 0;
}

本以为输出的会是12345678910,但是程序实际输出的是1111111111,这是因为,这是局部变量只在被定义的代码块有效,出了这块代码,它就会被销毁,所以调用这个函数后,一共循环10次,每次num都会被销毁,会被重新赋值。
但是num被static修饰,情况又会不一样了:

void test()
{
     static int num = 0;
     num++;
     printf("%d\n", num);
}
int main()
{
     int i = 0;
     for (i = 0; i < 10; i++)
     {
          test();
     }
     system("pause");
     return 0;
}

执行这段代码,结果是1 2 3 4 5 6 7 8 9 10.由此我们可以知道,被static修饰的局部变量创建后就不会被销毁,并且只会被初始化一次。这个变量会被改变生命周期,使得生命周期扩展到整个程序结束。但是在声明外部变量中extern int num;用static int num,即static修饰外部变量只能在自己的源文件总使用,其他文件使用extern int num;会发生错误。

猜你喜欢

转载自blog.csdn.net/ffsiwei/article/details/80424702