B站鹏哥C语言
乱码
https://www.cnblogs.com/Sayuw/p/16187712.html
键盘录入:scanf()
#define _CRT_SECURE_NO_WARNINGS 1
打印:printf()
#include <stdio.h>
hello world
%s - 打印字符串
%d - 打印整型
%c - 打印字符
%f - 打印浮点数
%p - 以地址的形式打印
%x - 打印16进制数字
%lf - 打印double
#include<stdio.h>
int main() {
printf("hello world\n你好");
char a = 'C';
printf("%c\n", a);//打印字符格式数据
int b = 10;
printf("%d",b);//打印整型10进制数据
return 0;
}
键盘录入
#define _CRT_SECURE_NO_WARNINGS 1
scanf(类型,对应得变量)对应变量前面得加&
#define _CRT_SECURE_NO_WARNINGS 1//scanf键盘录入
#include <stdio.h>//printf
int main() {
int num1 = 0;
int num2 = 0;
int sum = 0;
scanf("%d%d",&num1,&num2);//不要加换行符
sum = num1 + num2;
printf("sum = %d\n",sum);
return 0;
}
变量
c语言任意一个变量在整个项目中都能够使用,在a文件里面定义一个变量,在b文件中也能够使用,但是要在类型前面加上extern
常量
//1.字面常量
10;
//2.const - 常属性,使变量成为常变量,但本质上还是变量,创建数组时不可以使用常变量
const int a = 10;//常变量,值不可变
//3.#define 定义的标识符常量
#define MAX 10
//4.枚举常量,一一列举
enum sex
{
boy,
girl,
no
};
int main()
{
enum sex s = boy;
return 0;
}
字符串
C语言中没有字符串这种数据类型,可以通过char型数组来替代;
C语言中,字符串一定是一个char型数组,但char型数组未必是字符串;
在C语言的char型数组中,数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char型数组没有以数字0结尾,那么就不是一个字符串,只是普通 字符数组,所以字符串是一种特殊的char的数组。
正确写法:
char arr[] = { 'a','b','c','\0'}; && { 'a','b','c',0};
char arr[] = "abc";//默认后面添加了一个\0
char arr[24] = {"我是一个英雄"};//如果填写的长度,那么必须与后面长度相同
//打印
printf("%s",arr);//abc
错误写法:
char arr[] = { 'a','b','c',};
计算长度的函数:strlen();
char arr[] = "abc";
printf("%d\n",strlen(arr));
转义字符
\n 换行符
\t 空格
\'转义单引号
\" 转义双引号
语句
if else
int num = 0;
printf("请输入1&2:");
scanf("%d", &num);
if (num == 1)
{
printf("你输入的是1");
}
else
{
printf("输入的不是1");
}
while
int line = 0;
while (line<=20)
{
printf("%d\n",line);
line++;
}
数组
格式:与java一样
int arr[] = {1,2,3,4,5};
printf("%d\n",arr[3]);
函数
基本格式:跟java一样就是没有public
:先定义,后使用,必须写在调用前面
int funtionname(int x,int b)
{
int a = 0;
a = x + b;
return a;
}
操作符
- 算数操作符
+ - * / %
- 常用控制符
++ / --
& 取地址
sizeof 操作数得类型得长度
~ 对一个数的二进制按位取反
++
--
* 简介访问操作符(接引用操作符)
(类型) 强制类型转换
//逻辑操作符
&& 逻辑与(有一个为假,即为假)
|| 逻辑或(有一个为真,即为真)
- 源码,反码,补码
源码与反码和补码得相互转换
//111111111111111111111 源码 [ - 1 ] -> 反码 -> 按位取反 - > 补码
//111111111111111111110
//000000000000000000001
- 按位取反
0换1,1换0
111111111111110
000000000000001
int a = 10;
int b = ~a;
printf("%d",b);//-1
- ++ , –
int a = 10;
int b = a++;//先使用再自增1 ++a:先自增1再使用
printf("a=%d\nb=%d",a,b);//a=11 b=10
int a =10;
int b = a--;//先使用再自减1 --a:先自减1再使用
printf("a=%d\nb=%d",a,b);//a=9 b=10;
- 表达式
三元表达式
exp ? exp2:exp3
逗号表达式
exp1,exp2,exp3, ..expn
下标引用,函数调用和解构成员
[] () . ->
2进制 - > 10进制?
2进制数+1:当2进制+1或-1时,最后一位如果是0,说明这位为空,+1为1,如果为1,说明这二进制位,已满,+1则化1为0再后面加一个0
//auto:自动变量,每个局部变量前面都有一个auto,因为都有,所以忽略不写
int a = 10; == auto int a = 10;
//计算机存储
//寄存器
//高速缓存
//内存
//硬盘
//速度依次下降
register int a = 10;//建议把a定义寄存器变量,因为寄存器数量有限,所以,是否定义为寄存器变量,编译时,会自己决定
signed int a = 10; //定义变量有符号,啊就是10
unsigned int a = -10; //定义变量忽略符号,-10对他来说也是10
//typedef - 类型定义 - 类型重定义,把int改名字,就是给int起个别名/小名
typedef int u_int;
u_int a = 10;
printf("a=%d", a );//a=10;
//extern 可以引入别的源文件里的变量
int a = 10//a.c
extern int a;//b.c
printf("%d",a);
Static
变量的两点属性,生命周期,和作用域
1.static修饰变量
static 修饰局部变量,局部变量的生命周期变长,
static 修饰全局变量,改变了变量的作用域 - 让静态的全局变量只能在自己所在的源文件内部使用
2.static修饰函数
改变了函数的作用域-不准确
#define定义常量和宏
//不需要 类型 和 等号
#define a 10
宏得定义
类似于函数
//三元操作符
#define max(x,y) (x>y?x:y)
//作用等同于宏
int max(int x, inty)
{
int a = x > y ? x : y
return a;
}
指针
指针实例
&a = > 取a的地址
int a = 10 就是取一块内存[内存有自己的编号],内存里面存放10[编号对应的就是10这个数],int * p = &a就是把用p来代替*&a**【p = &a】, * p = 20的意思是拿个20去找p的地址,并把里面的值换成20
在32位系统中一个指针的大小位4个byte
在64位系统中一个指针的大小位8个byte
int a = 10;
int * p = &a;// p为一个整型指针变量,指针的名称叫p,类型为int *
printf("%p\n",&a);//000000000061FE14
printf("%p\n",p);//000000000061FE14
printf("%d\n",a);//10
* p = 20;// * - 解引用操作符
printf("%d\n",a);//20
printf("%d\n",p);//8个字节
在32位系统中一个指针的大小位4个byte
在64位系统中一个指针的大小位8个byte
int a = 10;
int * p = &a;// p为一个整型指针变量,指针的名称叫p,类型为int *
printf("%p\n",&a);//000000000061FE14
printf("%p\n",p);//000000000061FE14
printf("%d\n",a);//10
* p = 20;// * - 解引用操作符
printf("%d\n",a);//20
printf("%d\n",p);//8个字节