c基础总结(1)

本文深入讲解C语言的基础概念,包括变量与常量的区别,变量的作用域与生命周期,以及如何合理命名变量。此外,还详细介绍了C语言中的各种运算符,如逻辑运算符、位运算符、自增自减运算符等,以及sizeof运算符的使用方法。

一、常量与变量
1、变量

#include<stdio.h>
int main()
{
	int a = 10;
	return 0;
}
  • ‘=’ :为赋值号,赋值号左边a为变量,变量在程序中可以被重新复制。
  • 变量在程序中存在有一定的作用域和生命周期,变量的作用域在本函数中,普通变量的声明周期在函数执行结束后其内存就会被回收,这也是函数传参时形参的改变不会影响实参的变化,在函数调用结束后形参的内存就会被回收掉。
  • 变量的命名规则 变量中可以包含字母、数字、下划线,但不能以数字开头。例如:
#include<stdio.h>
int main()
{
	int a_a1;	//合法
	int _a1;	//合法
	int 1a_;	//不合法
}

对变量的命名不仅要合法,也要合理,在代码量很大时,对于随意的命名对程序的可读性影响很大,所以命名的合理性在写代码是也要注意,例如:如果定义一个整型变量表示年龄

int age;

2、常量
常量可以是一个具体的数字,字母,字符串,在程序中

int a = 10;		//10就为常量
char ch = 'c';	//字符‘c’表示常量
const int a = 20;			//此处的a也表示常量

在c语言中const 修饰变量是不能被重新重新赋值,如果你想改变a的值

const int a=20;
a=10;				//错误,不能改变

除此之外还有宏定义,例如

#define PI 3.14

宏定义实在预处理的过程将函数中的PI 全部替换为 3.14

#include<stdio.h>
#define PI 3.14

int main()
{
	printf("边长为5的圆的面积为:%d\n",5*5*PI);
	return 0;
}

此处的PI就会在预编译过程中被替换,在函数的预编译过程会进行 宏替换、注释的替换(替换为空格)、头文件的引入
二、函数运算符
():圆括号 单目运算符,强制类型转换,函数参数表

int main()			//圆括号表示函数
{
	int a = 10;
	char b = (char)a;			//表示将int 类型的a转换为char 类型 
	return 0;
}

[]: 数组元素的下标

int arr[5]={1,2,3,4,5};		//数组下标从0开始到4,不存在arr[5]

’->’:指向结构体成员
用于指向结构体的指针引用结构体成员时使用
’.’ :引用结构体成员
结构体变量引用结构体时使用

typedef struct student{
	int age;
	char name[20];
}*stuArr,stu;
int main()
{
	stu s1;
	stuArr p;
	p=&s1;
	p->age=10;				//利用指针访问结构体成员
	s1.age=10;				//引用结构体成员
}

!:逻辑非
&&:逻辑与
||:逻辑或

int a=10;
int b=0;
if(!a)
{
	printf("非a为真");
}
if(a&&b)
{
	printf("a与b都为真");
}
if(a||b)
{
	printf("a与b至少有一个为真");
}

‘~’:按位取反
‘<<’:左移
‘>>’:右移
‘^’:按位异或
‘&’:按位与
‘|’:按位或

在计算机中数据都是以二进制的形似存储,以上都是二进制条件下数据的运算,在计算机中,位运算要比加减乘除运算的速度快

sizeof:在c语言中sizeof不表示函数,sizeof用于计算字节数

int a = 10;
int *p=&a;
sizeof(a);		//a为int类型,在内存中占4个字节
sizeof(p);		//p为指针类型,所有的指针类型在内存中都占4个字节
int Fun()
{
	return 0;
}

int main()
{
	int a=10;
	int arr[5]={1,2,3,4,5};
	printf("%d\n",sizeof(a++));		//4 在编译时期只确定类型,a不参与运算,a的值不发生改变
	printf("%d\n",sizeof(int));			//4 返回int 型所占内存的大小
	printf("%d\n",sizeof a);			//4 sizeof 后跟变量名时可以不带括号
	printf("%d\n",sizeof(arr[5]));		//4 arr[5]虽然越界,但sizeof只确定类型,并不访问arr[5]中的内容,故不报错
	printf("%d\n",sizeof(Fun()));	//4 sizeof计算函数返回值的类型
}

’++’,’–’:自增,自减

int a = 10;
int b;
b= a++;		//先将a的值赋给b然后再自增
b= ++a;		//先将a自增后将a的值赋给b

‘+’:加法运算符
’-’:求负,减法运算
’*’:指针间接引用符
‘/’:除法运算符
‘%’:求余数运算符

int main()
{
	int a = 7;
	int b = 2;
	printf("%d\n",a+b);
	printf("%d\n",a-b);
	printf("%d\n",a*b);
	printf("%d\n",a/b);
	printf("%d\n",a%b);
	/*
	以上都是整形范围内的运算
	*/
}

扩展:

#include<stdio.h>
int main()
{
	char ch = '好';
	printf("%c",ch);
	return 0;
}

在执行这段程序时屏幕上会打印出’?’,我觉得应该时因为每个汉字占两个字节,而char 只占一个字节,所以在赋值的时候只将汉字的中的一个字节赋给了 ch 。改变打印方式为十进制后

#include<stdio.h>
int main()
{
	char ch = '好';
	printf("%d",ch);
	return 0;
}

打印结果为-61
在这里插入图片描述
显然不在0-127之间,所以我认为应该是vs 在对不再0-127之间的数进行字符打印时会用’?'代替不能打印的字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值