敲2w行代码,拿到好offer!C语言学习Part1(1_1000)(1)
  bqkHXma1IDpq 2023年11月02日 45 0

什么是C语言? 计算机语言

二进制语言-> 汇编语言-> B语言-> C语言/C++语言

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

包含一个头文件

std-> 标准 standard input output

printf-> print function


%c-->字符格式

%p-->地址

%x-->十六进制

%f-->5位小数位

%lf-->6位小数位


内存上:(字节数)

char(1)  short(2)  int(4)  long(4/8)

long long(8)  float(4)  double(8)


C语言规定:

sizeof(long) >= sizeof(int) 与平台有关


计算机中的单位:

bit-->比特位  只能存一个二进制位(0/1)

byte-->字节  1字节=8比特位

kb    1kb=1024byte

mb    1mb=1024kb

gb、tb、pb


范围:

int--> 4字节(0~2^32 -1)--32个0~32个1

short int--> 2字节(0~2^16 -1)--16个0~16个1


float weight = 96.5f;

默认是double,用f避免精度丢失



C语言规定:所有变量定义要在当前代码块的最前面


全局变量的生命周期即整个程序的周期


const int num = 4;

const--常属性

num--const修饰的常变量

本质还是变量,但具有常属性

#define max 10
int main() {
	int arr[max] = { 0 };
	//用法正确
}


枚举常量

enum Sex
{
	MALE,
	FEMALE,
	SECRET
};
int main()
{
	enum Sex s = FEMALE;//序号1
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);//序号问题
	printf("%d\n", s);
	//MALE = 6;(x)
}


字符串-->双引号

#include<string.h>
int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a','b','c', };
	char arr3[] = { 'a','b','c',0 };
	printf("%s\n", arr1);
	printf("%s\n", arr2);//没有结束标志,会出现乱码
	printf("%s\n", arr3);
	int i = 0;
	int len = sizeof(arr2) / sizeof(arr2[0]);
	for(i=0;i<len;i++)
		printf("%c ", arr2[i]);
	printf("\n");
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));//随机值,找'\0'
}


转义字符

#include<string.h>
int main()
{
	printf("字符a:%c\n", 'a');
	printf("单引号:%c\n", '\'');

	printf("反斜杠:%c\n", '\\');

	printf("八进制数字:%c\n", '\130x');
	//\ddd-->ddd表示1~3个八进制数字:\130x

	printf("长度:%d\n", strlen("c:\test\32\test.c"));//13

	printf("八进制32的ASCII码值对应:%c\n", '\32');
	printf("八进制32的十进制数字:%d\n", '\32');//26
	//\32--32是2个八进制数字
	//32作为八进制代表的那个十进制数字,作为ACSCII码值对应的字符是:
			//32->十进制26;ASCII码值对应“——>”
	printf("十六进制的61对应字符:%c\n", '\x61');//十六进制,对应a
	printf("八进制的60对应:%c\n", '\60');//字符0--八进制\60--十进制48
	return 0;
}

/*注释不支持(同类)嵌套*/

/*

//敲2w行代码  

  //拿到好offer!

*/


移位操作符:(2进制位)

<<左移;>>右移

位操作符:(2进制位)

&按位与  ||按位或  ^按位异或

复合赋值符:+=  -=  &=  >> ……

单目操作符:(一个操作数)

&  !  ++ ……

双目操作符

关系运算符:

>  <  >=  <=  !=  == ……

逻辑运算符:

&&  ||

条件运算符:

exp1 ?exp2: exp3--->max = (a > b? a : b)


转义字符\0的ASCII码值是0

EOF(end of file)文件结束标志-1


~  按位取反(2进制位)

int main() {
	int a = 0;//4字节,32bit位,32个0
	int b = ~a;//32个1-->-1
	printf(" %d\n", b);//-1
	/*负数在内存中存储的时候存的是二进制的补码
	补码-1->反码->符号位不变,其余按位取反->原码
	11111111_11111111_11111111_11111111(32个)
	11111111_11111111_11111111_11111110(-1)
	10000000_00000000_00000000_00000001(取反)-->-1
 
 原码——反码——补码:
		只要是整数,内存中存储的都是二进制的补码
 整数三码相同;
	*/
}


int main()
{
	int a = 10;
	int b = a++;//后置++,先用后加,b = 10;a = 11;
	printf("a = %d, b = %d\n", a, b);
	int c = ++a;//前置++,先加后用,c = 11;a = 11;
	printf("a = %d c = %d\n", a, c);
}

关键字:

自动变量(一般省略):auto int a = 10;

 

extern ——> 引入外部符号

 extern int g_val;//引入别的.c文件的变量值(要求两文件的后缀名相同)

 extern int Add(int, int);//声明外部函数

 

register ——> 寄存器关键字

 计算机存储数据可存在:

  寄存器--高速缓存(70兆)--内存(4G/8G/16G)--硬盘

 CPU-->中央处理器

  当CPU速度越来越快时,与内存速度已远远不匹配,就让内存把数据经高速缓存放到寄存器中,

  让CPU从寄存器拿数据,若拿不到,再向下找

 register int a = 10;

 //建议把a定义成寄存器变量,具体执行还需编译器自己判断

 

int == signed int//定义有符号数

unsigned int num = -1;//定义无符号数,num = 1

 

union ——> 联合体/共用体

 

typedef ——> 类型定义/类型重定义

 typedef unsigned int u_int;

 u_int a = 10;//起别名

 

static ——> 静态变量

 1>static修饰局部变量a,则a的生命周期变长(a = 10,就一直等于10)

 2>static修饰全局变量x,则改变了x的作用域,让静态全局变量只能在当前源文件中使用

 3>static修饰函数,则改变了函数的链接属性(普通函数具有外部链接属性),变成了内部链接属性

 

#define ——> 定义常量和宏

 #define PI 3.14;

 #define MAX(X, Y) (X> Y? X: Y)



指针:


地址-->空间

如何产生地址?

以32位为例:

 32位指有32跟地址线/数据线,每根有正(1)负(0)电之分,

 就会产生2^32个地址和编号

 以一个字节为单位划分一个内存空间

int main()
{
	int a = 10;//4个字节
	int* p = &a;//取地址,p是存放地址的变量
	printf("%p\n", p);
	printf("%p\n", &a);//二者等价
	*p = 20;//改变原来变量a的值,*p就是a
	//*p ——> 解引用操作符
	printf("%d\n", a);
}

指针变量的大小?(只与平台有关)

在32的平台上,1个32位bit位用4字节就够了(32个bit位存放32个0/1)

在64的平台上,64bit位=8字节(64个bit位存放64个0/1)

int main()
{
	printf("%d\n", sizeof(int*));
}


结构体struct

//处理复杂对象,是用户自己创建的一种类型
#include<string.h>
//类型创建在main函数之外
struct Book {
	char name[20];
	short price;
};
int main() {
	//创建变量
	struct Book b1 = { "C语言",55 };
	//打印
	printf("书名:%s\n", b1.name);
	printf("价格:%d\n", b1.price);
	//修改
	b1.price = 40;
	//结构体指针
	struct Book* pb = &b1;
	printf("%s\n", (*pb).name);
	printf("%s\n", pb->name);
		//操作符.  -->结构体变量.成员   b1.name/(*pb).name
		//操作符-> -->结构体指针->成员  pb->name
		
	//修改书名
		//由于name是数组,与price(变量)不同,
		//不可用b1.name = "C++"修改,只能用拷贝strcpy	
		//string copy——>字符串拷贝——>库函数<string.h>
	strcpy(b1.name, "C++");

}

数组名本身就是指针!


如何学好C语言?

C生万物,编程之本,母体语言

别叫苦,别喊累,别抱怨没时间!!!

学好编程,不只是C语言:
	必须学好语言、算法、数据结构(DS)、系统(Linux,Windows)、
	网络(网络基础、网络编程)





【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
bqkHXma1IDpq