目录
20231104
一、作用域、extern声明外部符号
①main.c
#include <stdio.h>
//#include <stdlib.h>
int global=2023;
void test()
{
printf("test()--%d\n",global);
}
int main()//main函数有且唯一
{
test();
printf("%d\n",global);
//未声明的标识符
//extern声明外部符号的
extern int g_val;
printf("g_val=%d\n",g_val);
//局部变量的作用域
int num=0;
{
printf("num=%d\n",num);
}
return 0;
}
②sum.c
int g_val=0;
①main.c
#include <stdio.h>
//#include <stdlib.h>
int global=2023;
void test()
{
printf("test()--%d\n",global);
}
int main()//main函数有且唯一
{
test();
printf("%d\n",global);
//未声明的标识符
//extern声明外部符号的
extern int g_val;
printf("g_val=%d\n",g_val);
//局部变量的作用域
int num=0;
{
printf("num=%d\n",num);
}
return 0;
}
②sum.c
int g_val=0;
二、生命周期
#include<stdio.h>//standard input output
int main()//main函数有且唯一
{
{
int a=10;
//局部变量进入作用域即生命周期的开始,出作用域即生命周期的结束
printf("a=%d\n",a);//0k
//全局变量的生命周期=main函数=整个程序
}
//printf("a=%d\n",a);//error
return 0;
}
#include<stdio.h>//standard input output
int main()//main函数有且唯一
{
{
int a=10;
//局部变量进入作用域即生命周期的开始,出作用域即生命周期的结束
printf("a=%d\n",a);//0k
//全局变量的生命周期=main函数=整个程序
}
//printf("a=%d\n",a);//error
return 0;
}
跨平台性/可移植性
跨平台性/可移植性 #define _CRT_SECURE_NO_WARNINGS //忽略不安全的函数--源文件第一行 属性查找目标位置10.0--VC--vcprojectitens--newc++file.cpp里面拷贝上面一句(用记事本打开的话会出现拒绝访问),建议用edit with notepad++(Notepad++) scanf、strcpy、strlen、strcat等函数都不安全
三、常变量、const修饰的常变量
#include <stdio.h>
int main()
{
//const--常属性
//const修饰的常变量
const int num=4;//num本质上还是变量,但具有常属性
int arr1[10]={0};//ok
//error
//int n=10;
//int arr[n]={0};
//const int n=10;
//int arr[n]={0};
//[Error] variable-sized object may not be initialized可变大小的对象可能未初始化
const int n=10;
int arr[n];
arr[n]=2;//arr[n]; or arr[0]=2; 都没错
//n=20;//error n不能更改
//printf("a=%d\n",a);
return 0;
}
#include <stdio.h>
int main()
{
//const--常属性
//const修饰的常变量
const int num=4;//num本质上还是变量,但具有常属性
int arr1[10]={0};//ok
//error
//int n=10;
//int arr[n]={0};
//const int n=10;
//int arr[n]={0};
//[Error] variable-sized object may not be initialized可变大小的对象可能未初始化
const int n=10;
int arr[n];
arr[n]=2;//arr[n]; or arr[0]=2; 都没错
//n=20;//error n不能更改
//printf("a=%d\n",a);
return 0;
}
四、define定义的标识符常量--define不是关键字
#include <stdio.h>
//#define定义的标识符常量
#define MAX 10
int main()
{
int arr[MAX]={10};
printf("%d\n",MAX);
return 0;
}
#include <stdio.h>
//#define定义的标识符常量
#define MAX 10
int main()
{
int arr[MAX]={10};
printf("%d\n",MAX);
return 0;
}
五、枚举常量--enum不可变,但变量可变
#include <stdio.h>
//枚举常量
//枚举--一一列举,eg:星期:一到七
//枚举关键---enum
enum Sex
{
male,
female,
secret
};//分号不可省略
//male,female,secret--枚举常量
int main()
{
//enum Sex sex=male;
//sex=female;//不会报错的
//female=7;//会报错,枚举常量Sex是不能改变的,变量sex是可以改变的
printf("%d\n",male);//0
printf("%d\n",female);//1
printf("%d\n",secret);//2
return 0;
}
?
#include <stdio.h>
//枚举常量
//枚举--一一列举,eg:星期:一到七
//枚举关键---enum
enum Sex
{
male,
female,
secret
};
//male,female,secret--枚举常量
int main()
{
//enum Sex sex=male;
//sex=female;//不会报错的
//female=7;//会报错,枚举常量Sex是不能改变的,变量sex是可以改变的
printf("%d\n",male);//0
printf("%d\n",female);//1
printf("%d\n",secret);//2
return 0;
}
?
六、字符串strlen--字符串长度
strlen--string length 字符串长度
#include <stdio.h>
//#include
#include <string.h>//有此句以后不会出现警告
int main()
{
//数据在计算机上存储的时候,存储的是二进制但
// #%av这些并不方便存储,所以对应每个字符都有一个编号,eg:a--97,A--65(ASCII码值)【ASCII编码方式】
//怎么存字符串,拿一个空间存,则用数组
char arr1[]="abc";//数组中有四个元素,最后末尾是0(实质是\0),可以把一个字符串放到一个字符数组中去的
//"abc"--'a','b','c','\0'--'\0'标志字符串的结束
//char arr2[]={'a','b','c',0};//和arr1的输出一样,此处0是\0的ASCII码值
//char arr2[]={'a','b''c','\0'};//此行和arr1意义一样
//转义字符\0是字符串的结束标志,不算字符串内容,不算作字符串长度
//'a'--97
char arr2[]={'a','b','c'};//没有遇到结束符\0,则随机打印
printf("%s\n",arr1);//打印字符串用%s //abc
printf("%s\n",arr2);//abc
//字符串类型
"abc";
"hello world\n";
"";//空字符串
//strlen--string length 字符串长度
printf("%d\n",strlen(arr1)); //3
printf("%d\n",strlen(arr2)); //3,vs上面是15(遇到\0才会停止),应该是随机值
return 0;
}
#include <stdio.h>
//#include
#include <string.h>//有此句以后不会出现警告
int main()
{
//数据在计算机上存储的时候,存储的是二进制但
// #%av这些并不方便存储,所以对应每个字符都有一个编号,eg:a--97,A--65(ASCII码值)【ASCII编码方式】
//怎么存字符串,拿一个空间存,则用数组
char arr1[]="abc";//数组中有四个元素,最后末尾是0(实质是\0),可以把一个字符串放到一个字符数组中去的
//"abc"--'a','b','c','\0'--'\0'标志字符串的结束
//char arr2[]={'a','b','c',0};//和arr1的输出一样,此处0是\0的ASCII码值
//char arr2[]={'a','b''c','\0'};//此行和上面一行意义一样
//转义字符\0是字符串的结束标志,不算字符串内容,不算作字符串长度
//'a'--97
char arr2[]={'a','b','c'};//没有遇到结束符\0,则随机打印
printf("%s\n",arr1);//打印字符串用%s //abc
printf("%s\n",arr2);//abc
//字符串类型
"abc";
"hello world\n";
"";//空字符串
//strlen--string length 字符串长度
printf("%d\n",strlen(arr1)); //3
printf("%d\n",strlen(arr2)); //3,vs上面是15(遇到\0才会停止),应该是随机值
return 0;
}
七、转义字符
--转变原来的意思、%s是字符串%c是字符
int main()
{
printf("abc");//abc
printf("abc\n");//abc \n表示换行
return 0;
}
#include<stdio.h>
//#include
#include <string.h>//有此句以后不会出现警告
int main()
{
printf("abc");//abc
printf("abc\n");//abc \n表示换行
printf("c:\tes\32\test.c\n");//c: es est.c
//\t-水平制表符 (按Tab )
printf("c:\\tes\\32\\test.c\n");//c:\tes\32\test.c
printf("%c\n",'a');//a
//printf("%c\n",''');//error,本来单引号是成对出现,但是我们只要单个的,不要它成对出现的义,所以利用\转义
printf("%c\n",'\'');//'
// printf("%c\n","abc");//没有数据,因为“abc”为字符串不能用%c单个字符输出 ?
printf("%s\n","abc");
printf("%c\n",'\"');//"
printf("%s\n","\"");//"
printf("%c\n",'\32');
printf("%d\n",strlen("c:\test\32\test.c"));//13
//\32---为一个字符 ,表示32作为八进制代表的那个十进制数字,作为ASCII码值,对应的字符
//32(八进制)--26(十进制)-- ->
//\ddd(ddd表示1~3个八进制的数字,如\130 X)
printf("%c\n",'\132');
//\xdd(dd表示2个十六进制数字,如\x30 0)
printf("%c\n",'\x61');//a 6*16^1+1*16^1=97==>a
return 0;
}
int main()
{
printf("abc");//abc
printf("abc\n");//abc \n表示换行
return 0;
}
#include<stdio.h>
//#include
#include <string.h>//有此句以后不会出现警告
int main()
{
printf("abc");//abc
printf("abc\n");//abc \n表示换行
printf("c:\tes\32\test.c\n");//c: es est.c
//\t-水平制表符 (按Tab )
printf("c:\\tes\\32\\test.c\n");//c:\tes\32\test.c
printf("%c\n",'a');//a
//printf("%c\n",''');//error,本来单引号是成对出现,但是我们只要单个的,不要它成对出现的义,所以利用\转义
printf("%c\n",'\'');//'
// printf("%c\n","abc");//没有数据,因为“abc”为字符串不能用%c单个字符输出 ?
printf("%s\n","abc");
printf("%c\n",'\"');//"
printf("%s\n","\"");//"
printf("%c\n",'\32');
printf("%d\n",strlen("c:\test\32\test.c"));//13
//\32---为一个字符 ,表示32作为八进制代表的那个十进制数字,作为ASCII码值,对应的字符
//32(八进制)--26(十进制)-- ->
//\ddd(ddd表示1~3个八进制的数字,如\130 X)
printf("%c\n",'\132');
//\xdd(dd表示2个十六进制数字,如\x30 0)
printf("%c\n",'\x61');//a 6*16^1+1*16^1=97==>a
return 0;
}
八、注释
C++注释风格:// 一行或多行
devc++多行注释:Ctrl+/
C语言注释风格:/* */ 不能嵌套注释
九、选择语句
#include<stdio.h>
int main()
{
int input=0;
printf("加入我们\n");
printf("你要好好学习吗?(1/0)>:");
scanf("%d",&input);
if(input==1)
printf("offer\n");
else
printf("卖米线\n");
return 0;
}
#include<stdio.h>
?int main()
{
int input=0;
printf("加入我们\n");
printf("你要好好学习吗?(1/0)>:");
scanf("%d",&input);
if(input==1)
printf("offer\n");
else
printf("卖米线\n");
return 0;
}
循环语句--while循环for循环do-while
int main()
{
int line=0;
printf("加入我们\n") ;
while(line<200)
{
printf("敲一行代码:%d\n",line);
line++;
}
if(line>=200)
printf("offer\n");
return 0;
}
int main()
{
int line=0;
printf("加入我们\n") ;
while(line<200)
{
printf("敲一行代码:%d\n",line);
line++;
}
if(line>=200)
printf("offer\n");
return 0;
}
十、调用函数求和
//函数
//函数名Add,函数参数x,y ,int是函数返回类型,{}里面叫做函数体
int Add(int x,int y)
{
int z=x+y;
return z;
}
int main()
{
//计算两个数的和
int num1=10;
int num2=20;
int sum1=0,sum2=0;
int a =100;
int b=200;
sum1=Add(num1,num2);
sum2=Add(a,b);
printf("sum1=%d sum2=%d\n",sum1,sum2);
return 0;
}
//函数
//函数名Add,函数参数x,y ,int是函数返回类型,{}里面叫做函数体
int Add(int x,int y)
{
int z=x+y;
return z;
}
int main()
{
//计算两个数的和
int num1=10;
int num2=20;
int sum1=0,sum2=0;
int a =100;
int b=200;
sum1=Add(num1,num2);
sum2=Add(a,b);
printf("sum1=%d sum2=%d\n",sum1,sum2);
return 0;
}
十一、数组
一组相同类型元素的集合
int main()
{
// int arr[10];//定义一个存放10个整数数字的数组
// char arr[20];
// float arr[5];
int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d\n",arr[4]);//5,用下标访问元素
int i=0;
while(i<10)
{
printf("%d ",arr[i]);
i++;
}
return 0;
}
int main()
{
// int arr[10];//定义一个存放10个整数数字的数组
// char arr[20];
// float arr[5];
int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d\n",arr[4]);//5,用下标访问元素
int i=0;
while(i<10)
{
printf("%d ",arr[i]);
i++;
}
return 0;
}
十二、操作符
1、算术操作符%取余,/商、*、+、-
2、移位操作符--<<左移、>>右移
int main()
{
int a=5%2;//取余数
int b=5/2;//商
printf("a=%d b=%d\n",a,b);
int c=1;//整型1占4个字节--32bit位
//00000000000000000000000000000001 ==1
//00000000000000000000000000000100(补0)==4
int d=c<<2;//左移
printf("c=%d d=%d\n",a,d);
return 0;
}
算术%取余,/商
int main()
{
int a=5%2;//取余数
int b=5/2;//商
printf("a=%d b=%d\n",a,b);
int c=1;//整型1占4个字节--32bit位
//00000000000000000000000000000001 ==1
//00000000000000000000000000000100(补0)==4
int d=c<<2;
printf("c=%d d=%d\n",a,d);
return 0;
}
3、位操作----&、|、^
int main()
{
//(2进制)位操作
//&按位与 --两个都为真才为真
//|按位或 --有一个即为真
//^按位异或 --对应的二进制位相同,则为0;相异则为1
int a=1; //001
int b=5; //101
int c=a&b; //001==>1
int d=a|b; //101==>5
int e=a^b; //100==>4
printf("c=%d\n",c);
printf("d=%d\n",d);
printf("e=%d\n",e);
return 0;
}
int main()
{
//(2进制)位操作
//&按位与 --两个都为真才为真
//|按位或 --有一个即为真
//^按位异或 --对应的二进制位相同,则为0;相异则为1
int a=1; //001
int b=5; //101
int c=a&b; //001==>1
int d=a|b; //101==>5
int e=a^b; //100==>4
printf("c=%d\n",c);
printf("d=%d\n",d);
printf("e=%d\n",e);
return 0;
}
4、复合赋值符 += -= *= /= %= &= >>= <<= |= ^=
int main()
{
int a=10;
a=20;//赋值 ==判断相等
a=a+10;//和 a+=10; 完全等价
a-=20;
a&=2;
//复合赋值符 += -= *= /= %= &= >>= <<= |= ^=
return 0;
}
int main()
{
int a=10;
a=20;//赋值 ==判断相等
a=a+10;//和 a+=10; 完全等价
a-=20;
a&=2;
//复合赋值符 += -= *= /= %= &= >>= <<= |= ^=
return 0;
}
5、单目操作符! & sizeof ~
#include <stdio.h>
//#include <stdlib.h>
#include<string.h> //有此句以后不会出现警告
//单目操作符
//双目操作符
//三目操作符
int main()
{
// int a=10;
// int b=20;
// a+b;//+双目操作符(有两个操作数)
int a=10;
printf("%d\n",a);//10
printf("%d\n",!a);//0
return 0;
}
5.1-sizeof()
int a=10;
int num=0;
printf("%d\n",sizeof(a)); //4
printf("%d\n",sizeof(int)); //4
printf("%d\n",sizeof a); //4//sizeof 变量名()可以省略
//error--printf("%d\n",sizeof int);
//sizeof计算的是变量/类型所占空间的大小,单位是字节
//stelen计算的是字符串的长度
int arr[10] ={0};//10个整型 元素的数组 10*sizeof(int)=4-
printf("%d\n",sizeof (arr));
//计算数组的元素个数
//个数=数组总大小/每个元素的大小
num=sizeof(arr)/sizeof(arr[0]);
printf("num=%d\n",num);
int a=10;
int num=0;
printf("%d\n",sizeof(a)); //4
printf("%d\n",sizeof(int)); //4
printf("%d\n",sizeof a); //4//sizeof 变量名()可以省略
//error--printf("%d\n",sizeof int);
//sizeof计算的是变量/类型所占空间的大小,单位是字节
//stelen计算的是字符串的长度
int arr[10] ={0};//10个整型 元素的数组 10*sizeof(int)=4-
printf("%d\n",sizeof (arr));
//计算数组的元素个数
//个数=数组总大小/每个元素的大小
num=sizeof(arr)/sizeof(arr[0]);
printf("num=%d\n",num);