C语言基础01、02-helloworld、变量、常量、数据类型

1.1 第一个C语言程序:HelloWorld

1.1.1 编写C语言代码:hello.c

#include <stdio.h>

int main()
{
	//这是第一个C语言代码 
	printf("hello world\n");
	return 0;
}

C语言的源代码文件是一个普通的文本文件,但扩展名必须是.c

1.1.2 代码分析

1) include头文件包含

  1. #include的意思是头文件包含,#include <stdio.h>代表包含stdio.h这个头文件
  2. 使用C语言库函数需要提前包含库函数对应的头文件,如这里使用了printf()函数,需要包含stdio.h头文件
  3. 可以通过man 3 printf查看printf所需的头文件

#include< > 与 #include ""的区别:

  1. < > 表示系统直接按系统指定的目录检索
  2. "" 表示系统在 "" 指定的路径(没写路径代表当前路径)查找头文件,如果找不到,按系统指定的目录检索

2) main函数

  1. 一个完整的C语言程序,是由一个、且只能有一个main()函数(又称主函数,必须有)和若干个其他函数结合而成(可选)。

     2.main函数是C语言程序的入口,程序是从main函数开始执行。

3) {} 括号,程序体和代码块

  1. {}叫代码块,一个代码块内部可以有一条或者多条语句
  2. C语言每句可执行代码都是";"分号结尾
  3. 所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的
  4. 所有的可执行语句必须是在代码块里面

4) 注释

  1. //叫行注释,注释的内容编译器是忽略的,注释主要的作用是在代码中加一些说明和解释,这样有利于代码的阅读
  2. /**/叫块注释
  3. 块注释是C语言标准的注释方法
  4. 行注释是从C++语言借鉴过来的

5) printf函数

  1. printf是C语言库函数,功能是向标准输出设备输出一个字符串

     2.printf(“hello world\n”);//\n的意思是回车换行

6) return语句

  1. return代表函数执行完毕,返回return代表函数的终止
  2. 如果main定义的时候前面是int,那么return后面就需要写一个整数;如果main定义的时候前面是void,那么return后面什么也不需要写
  3. 在main函数中return 0代表程序执行成功,return -1代表程序执行失败
  4. int main()和void main()C语言中是一样的,但C++只接受int main这种定义方式

1.2 C语言编译过程

1.2.1 C程序编译步骤

C代码编译成可执行程序经过4步:

  1. 预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
  2. 编译:检查语法,将预处理后文件编译生成汇编文件
  3. 汇编:将汇编文件生成目标文件(二进制文件)
  4. 链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

1.2.2 gcc编译过程

1) 分步编译

预处理:gcc -E hello.c -o hello.i

编  译:gcc -S hello.i -o hello.s

汇  编:gcc -c hello.s -o hello.o

链  接:gcc    hello.o -o hello

选项

含义

-E

只进行预处理

-S(大写)

只进行预处理和编译

-c(小写)

只进行预处理、编译和汇编

-o file

指定生成的输出文件名为 file

文件后缀

含义

.c

C 语言文件

.i

预处理后的 C 语言文件

.s

编译后的汇编文件

.o

编译后的目标文件

2) 一步编译

gcc hello.c -o demo(还是经过:预处理、编译、汇编、链接的过程)

2. 数据类型

2.1 常量与变量

2.1.1 关键字

2.1.2 数据类型

数据类型的作用:编译器预算对象(变量)分配的内存空间大小。

2.1.3 常量

常量:

  1. 在程序运行过程中,其值不能被改变的量
  2. 常量一般出现在表达式或赋值语句中

整型常量

100,200,-100,0

实型常量

3.14 , 0.125,-3.123

字符型常量

‘a’,‘b’,‘1’,‘\n’

字符串常量

“a”,“ab”,“12356”

2.1.4 变量

1) 变量

变量:

  1. 在程序运行过程中,其值可以改变
  2. 变量在使用前必须先定义,定义变量前必须有相应的数据类型

标识符命名规则:

  1. 标识符不能是关键字
  2. 标识符只能由字母、数字、下划线组成
  3. 第一个字符必须为字母或下划线
  4. 标识符中字母区分大小写

变量特点:

  1. 变量在编译时为其分配相应的内存空间
  2. 可以通过其名字地址访问相应内存

2) 声明和定义区别

  1. 声明变量不需要建立存储空间,如:extern int a;

     2.定义变量需要建立存储空间,如:int b;

#include <stdio.h>

int main()
{
	//extern 关键字只做声明,不能做任何定义,后面还会学习,这里先了解
	//声明一个变量a,a在这里没有建立存储空间
	extern int a;
	a = 10;	//err, 没有空间,就不可以赋值

	int b = 10;	//定义一个变量b,b的类型为int,b赋值为10

	return 0;
}

从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义:

  1. int b 它既是声明,同时又是定义
  2. 对于 extern b来讲它只是声明不是定义

一般的情况下,把建立存储空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。

2.1.5 使用示例

#include <stdio.h>
#define MAX 10 //声明了一个常量,名字叫MAX,值是10,常量的值一旦初始化不可改

int main()
{
	int a;	//定义了一个变量,其类型为int,名字叫a

	const int b = 10; //定义一个const常量,名为叫b,值为10
	//b = 11; //err,常量的值不能改变

	//MAX = 100;	//err,常量的值不能改变

	a = MAX;//将abc的值设置为MAX的值
	a = 123;

	printf("%d\n", a); //打印变量a的值

	return 0;
}

2.2整型:int

2.2.1 整型变量的定义和输出

打印格式

含义

%d

输出一个有符号的10进制int类型

%o(字母o)

输出8进制的int类型

%x

输出16进制的int类型,字母以小写输出

%X

输出16进制的int类型,字母以大写输出

%u

输出一个10进制的无符号数

#include <stdio.h>

int main()
{
	int a = 123;	//定义变量a,以10进制方式赋值为123
	int b = 0567;	//定义变量b,以8进制方式赋值为0567
	int c = 0xabc;	//定义变量c,以16进制方式赋值为0xabc

	printf("a = %d\n", a);
	printf("8进制:b = %o\n", b);
	printf("10进制:b = %d\n", b);
	printf("16进制:c = %x\n", c);
	printf("16进制:c = %X\n", c);
	printf("10进制:c = %d\n", c);

	unsigned int d = 0xffffffff; //定义无符号int变量d,以16进制方式赋值
	printf("有符号方式打印:d = %d\n", d);
	printf("无符号方式打印:d = %u\n", d);
	return 0;
}

2.2.2 整型变量的输入

#include <stdio.h>

int main()
{
	int a;
	printf("请输入a的值:");

	//不要加“\n”
	scanf("%d", &a);

	printf("a = %d\n", a); //打印a的值

	return 0;
}

2.2.3 shortint、longlong long

数据类型

占用空间

short(短整型)

2字节

int(整型)

4字节

long(长整形)

Windows为4字节,Linux为4字节(32位),8字节(64位)

long long(长长整形)

8字节

注意:

  1. 需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能长于 int 类型。
  2. 当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。

整型常量

所需类型

10

代表int类型

10l, 10L

代表long类型

10ll, 10LL

代表long long类型

10u, 10U

代表unsigned int类型

10ul, 10UL

代表unsigned long类型

10ull, 10ULL

代表unsigned long long类型

打印格式

含义

%hd

输出short类型

%d

输出int类型

%ld

输出long类型

%lld

输出long long类型

%hu

输出unsigned short类型

%u

输出unsigned int类型

%lu

输出unsigned long类型

%llu

输出unsigned long long类型

#include <stdio.h>

int main()
{
	short a = 10;
	int b = 10;
	long c = 10l; //或者10L
	long long d = 10ll; //或者10LL

	printf("sizeof(a) = %u\n", sizeof(a));
	printf("sizeof(b) = %u\n", sizeof(b));
	printf("sizeof(c) = %u\n", sizeof(c));
	printf("sizeof(c) = %u\n", sizeof(d));

	printf("short a = %hd\n", a);
	printf("int b = %d\n", b);
	printf("long c = %ld\n", c);
	printf("long long d = %lld\n", d);

	unsigned short a2 = 20u;
	unsigned int b2 = 20u;
	unsigned long c2= 20ul; 
	unsigned long long d2 = 20ull; 

	printf("unsigned short a = %hu\n", a2);
	printf("unsigned int b = %u\n", b2);
	printf("unsigned long c = %lu\n", c2);
	printf("unsigned long long d = %llu\n", d2);

	return 0;
}

2.2.4 有符号数和无符号数区别

1) 有符号数

有符号数是最高位为符号位,0代表正数,1代表负数。

#include <stdio.h>

int main()
{
	signed int a = -1089474374; //定义有符号整型变量a
	printf("%X\n", a); //结果为 BF0FF0BA

	//B       F      0        F       F     0        B	      A
	//1011   1111   0000    1111    1111   0000     1011     1010

	return 0;
}

2) 无符号数

无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。

#include <stdio.h>

int main()
{
	unsigned int a = 3236958022; //定义无符号整型变量a
	printf("%X\n", a); //结果为 C0F00F46

	return 0;
}

当我们写程序要处理一个不可能出现负值的时候一般用无符号数这样可以增大数的表达最大值。

3) 有符号和无符号整型取值范围

数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值