c语言学习笔记1

一、文件类别

头文件:xxxx.h

源文件:xxxx.c         xxxx.cpp

.c表示C的源程序

.cpp表示C++的源程序

二、第一个c语言程序

程序的运作

main函数

关于main函数

1.c语言是从主函数的第一行开始执行的

2.main函数一个项目中有且仅有一个

3.一个项目可以有多个.c文件

4.但是多个.c文件中只能有一个main函数

#include<stdio.h>
int main()
{
	printf("Hello World!\n");
	return 0;
}
//输入Ctrl+f5运行

\n为换行符

使用输出标准printf函数需要引用stdio.h头文件(放到开头)

头文件各种类型:

stdio.h 输入输出标准函数头文件
string.h 字符串操作函数头文件
math.h 数学函数头文件
alloc.h 动态分配地址函数头文件
graphics.h 图形函数头文件
conio.h 屏幕操作函数头文件
dos.h 与DOS接口的函数头文件

三、数据类型

主要类型

  1. char                字符数据类型(也属于整型)
  2. int                   整型(字符操作函数大多返回int类型,由于EOF为-1,char无法接收)
  3. short               短整型
  4. long                长整型
  5. long long        更长的整型
  6. float                单精度浮点数(运算时精确至小数位)(如:float a = 9.0(会变成double类型))                           (float a = 9.5f)
  7. double            双精度浮点数

 (数据类型加上unsigned前缀可转为无符号类型eg:unsigned int b = 13,格式控制符为%u)

*无符号优先原则

注:有符号数与无符号数进行计算或是比较时,会全部转化为无符号数再进行补码计算。

eg(计算):

int x = -20;
unsigned int y = 10;
//会出现表达式( x + y > 0 )为真的情况
//这是由于 x + y 结果为无符号形式 

eg(比较):

#include<stdio.h>
int i;
void main()
{
	i--;
	//此时i值对应-1
	(i > sizeof(i)) ? printf(">") : printf("<");
	//由于sizeof返回值为无符号整型,故i会先被转化为无符号整型再进行比较
}

主要的输出控制符

格式控制符说明
%c输出一个单一的字符
%s输出一个字符串
%zd、%zx、%zo输出size_t类型
%hd、%d、%ld以十进制、有符号的形式输出 short、int、long 类型的整数
%hu、%u、%lu以十进制、无符号的形式输出 short、int、long 类型的整数
%ho、%o、%lo以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数
%#ho、%#o、%#lo以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数
%hx、%x、%lx
%hX、%X、%lX
以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%#hx、%#x、%#lx
%#hX、%#X、%#lX
以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。
%f、%lf以十进制的形式输出 float、double 类型的小数
%e、%le
%E、%lE
以指数的形式输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。
%g、%lg
%G、%lG
以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。

注:C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束

*sizeof操作符返回类型为无符号

注:sizeof操作符中的表达式不进行运算,sizeof通过类型属性得到结果,不参与值的计算。

因此sizeof可以无视非法访问等的问题

解释:

表达式分为

1.值属性

2.类型属性

eg:

3 + 5: 值属性为8 ------类型属性为int

eg:

void main()
{
	int a = 10;
	printf("%d\n", sizeof(a++));
	printf("%d\n", a);
}
//输出结果为4 10
//a++并未生效

sizeof-操作符-计算类型或者变量所占空间的大小

sizeof可以计算出每种类型所占的内存     其单位都为字节byte

通过上述性质sizeof可以计算出数组的元素个数

#include<stdio.h>
void main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int unit = sizeof(arr[0]);//计算一个元素的大小
	int amounts = sizeof(arr);//计算整个数组的大小
	int result = amounts / unit;//从而算出整个数组的元素
	printf("%d", result);
}

注:

sizeof可以计算实参的数组总内存大小,但在main之外的函数由于数组形参传过来的是指针,所以此时用sizeof计算数组得出来的是指针变量的内存大小。

不同数据类型所占的内存

#include<stdio.h>
int main()
{
	printf("%d\n",sizeof(char));
	printf("%d\n", sizeof(short));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(long));
	printf("%d\n", sizeof(long long));
	printf("%d\n", sizeof(float));
	printf("%d\n", sizeof(double));
	return 0;
}

%d是指定的输出格式,d表示用“十进制整数”形式输出,在这里输出时用sizeof(xx)的值取代%d

%d-整型 %f-float %lf-double

计算机中识别二进制0和1都占1bit的内存

相关单位换算

1 byte=8 bit

1 kb= 1024byte

1 mb=1024 kb

1 gb = 1024 mb

......

由图中运行结果可知      int整型与long长整型所占内存一样

这是由于 C语言标准:

sizeof(long)>=sizeof(int)

*整型提升

char类型转int类型的整型提升(short类型同理)

    char a = 3;
	char b = 127;
	char c = a + b;
	printf("%d", c);
//输出结果为-126

 进行加法运算时候,a与b会被整型提升

char类型为8bit,故:

a为0000 0011

b为0111 1111

整型提升根据符号位补1或0

a->0000 0000 0000 0000 0000 0000 0000 0011

b->0000 0000 0000 0000 0000 0000 0111 1111

a + b ->0000 0000 0000 0000 0000 0000 1000 0010

由于c还要转换为char类型,所以变为了1000 0010

1为符号位,所以成为了负数补码,求解后为-126

四、运算符优先级

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值