初识C语言(2)

初识C语言2

  • 9.操作符
    • 算数操作符
    • 位移操作符
    • 位操作符
    • 赋值操作符
    • 单目操作符
    • 关系操作符
    • 逻辑操作符
    • 条件操作符(三目操作符)
    • 逗号表达式
    • 下标引用,函数调用和结构成员
  • 10.关键字
  • 11.#define定义常量和宏
  • 12.指针
  • 13.结构体

9.操作符

算数操作符

在这里插入图片描述

#include
int main()
{
     
	int a = 7;
	int b = 3;
	printf("a + b=%d\n", a + b);
	printf("a - b=%d\n", a - b);
	printf("a * b=%d\n", a * b);
	printf("a / b=%d\n", a / b);
	printf("a %% b=%d\n", a % b);
	return 0;
}

初识C语言(2)_第1张图片

位移操作符

在这里插入图片描述

#include
int main()
{
     
	int a = 2;
	printf("a>>1=%d\n", a >> 1);
	printf("a<<1=%d\n", a << 1);
	return 0;
}

初识C语言(2)_第2张图片
在这里插入图片描述
右移操作符类似

位操作符

在这里插入图片描述

#include
int main()
{
     
	int a = 5;
	int b = 3;
	int c = a&b;
	printf("a&b=%d\n", c);
	int d = a^b;
	printf("a^b=%d\n", d);
	int f = a | b;
	printf("a|b=%d\n", f);
	return 0;
}

初识C语言(2)_第3张图片

赋值操作符

在这里插入图片描述
a=a+5等同于a+=5,其他类似

单目操作符

初识C语言(2)_第4张图片

#include
int main()
{
     
	//sizeof是一个操作符
	//不是函数
	//计算类型或者变量的大小的
	int a = 10;
	printf("sizeof(int)=%d\n", sizeof(int));
	printf("sizeof(a)=%d\n", sizeof(a));

	int arr[10] = {
      0 };
	printf("sizeof(arr)=%d\n", sizeof(arr));//计算的是数组的总大小,单位是字节——40
	printf("sizeof(arr[0])=%d\n", sizeof(arr[0]));
	int sz = sizeof(arr) / sizeof(arr[0]);
	printf("sz=%d\n", sz);
	return 0;
	return 0;
}

初识C语言(2)_第5张图片

#include
int main()
{
     
	//~按(二进制)位取反	把所有二进制位中数字1变0,0变1.
	int a = 0;
	printf("~a=%d\n", ~a);
	return 0;
}

初识C语言(2)_第6张图片
初识C语言(2)_第7张图片

#include
int main()
{
     
	int a = 10;
	int c = ++a;//前置++,先++再使用
	printf("a=%d\n", a);
	printf("++a=%d\n", c);

	int b = 10;
	int d = b++;//后置++,先使用再++
	printf("b=%d\n", a);
	printf("b++=%d\n", d);
	return 0;
}

初识C语言(2)_第8张图片

#include
int main()
{
     
	int a = 3;
	double b = 3.14;
	printf("*(&a)=%d\n", *(&a));
	printf("(int)b=%d\n", (int)b);//将float类型强制转化成int类型
	return 0;
}

初识C语言(2)_第9张图片

关系操作符

在这里插入图片描述

逻辑操作符

在这里插入图片描述

条件操作符(三目操作符)

在这里插入图片描述

#include
int main()
{
     
	int a = 3;
	int b = 5;
	int max = 0;
	max = a > b ? a : b;
	printf("max=%d\n", max);
	return 0;
}
//exp1成立,表达式结果为exp2
//exp1不成立,表达式结果为exp3

初识C语言(2)_第10张图片

逗号表达式

在这里插入图片描述

#include
int main()
{
     
	int a = 0;
	int b = 3;
	int c = 5;
	int d = (a = b + 2, c = a - 4, b = c + 2);
	//逗号表达式从左向右依次计算
	//整个表达式结果是最后一个表达式的结果
	printf("d=%d\n", d);
	return 0;
}

初识C语言(2)_第11张图片

下标引用,函数调用和结构成员

在这里插入图片描述

//下标引用
int main()
{
     
    int arr[10]={
     1,2,3,4,5,6,7,8,9,10};
    printf("%d",arr[5]);
    return 0;
}
//函数调用操作符
int main()
{
     
    //函数调用的时候函数,函数名后()就是函数调用操作符
    printf("hehe");
    printf("%d",100);
    return 0;
}

10.关键字

1.C语言提供,不能自己创造
2.变量名不能是关键字
常见关键字

关键字 说明
auto 自动变量
break 跳出当前循环
case 开关语句分支
char 字符型
const 只读变量
contine 结束当前循环,进入下一轮循环
default 开关语句中的其他分支
do 循环语句
double 双精度浮点型
else 条件语句的否定分支,常与if连用
enum 枚举型
extern 申明外部符号
float 单精度浮点型
for 循环语句
goto 无条件跳转语句
if 条件语句
int 整型
long 长整型
register 寄存器关键字
return 函数返回
short 短整型
signed 有符号
sizeof 计算数据长度
static 静态变量
struct 结构体变量
switch 用于开关语句
typedef 类型重命名
union 联合体共用体
unsigned 无符号
void 声明函数无返回值
volatile 变量在程序执行中可被隐含地改变
while 用于循环语句

typedef:类型重命名

#include
typedef unsigned int u_int;//注意分号
int main()
{
     
	unsigned int num = 100;
	u_int num2 = 100;
	printf("num=%d\n", num);
	printf("num2=%d\n", num2);
	return 0;
}

初识C语言(2)_第12张图片
static
(1)static修饰局部变量
比较下面两幅图
初识C语言(2)_第13张图片
初识C语言(2)_第14张图片
说明:static修饰局部变量改变局部变量的生命周期(本质上是改变了变量的存储类型,从栈区变为静态区)
初识C语言(2)_第15张图片
(2)static修饰全局变量
全局变量,在其他源文件内部可以使用,是因为全局变量具有外部链接属性
但是被static修饰后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了
初识C语言(2)_第16张图片
初识C语言(2)_第17张图片
(3)static修饰函数
static修饰函数,使的函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用
本质上:static是将函数的外部链接属性变成了内部链接属性!(和static修饰的全局变量一样!)
初识C语言(2)_第18张图片
初识C语言(2)_第19张图片

11.#define定义常量和宏

//define定义常量
#include
#define MAX 10
//define定义宏
#define ADD1(x,y) x+y
#define ADD2(x,y) ((x)+(y))
int main()
{
     
	printf("MAX=%d\n", MAX);
	printf("4 * ADD1(2, 3)=%d\n", 4 * ADD1(2, 3));
	printf("4 * ADD2(2, 3)=%d\n", 4 * ADD2(2, 3));
	return 0;
}

初识C语言(2)_第20张图片

12.指针

  • 内存

想要了解指针的概念,首先要明白内存的含义
内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元 ,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
初识C语言(2)_第21张图片

int main()
{
     
	int a = 10;//a在内存中要分配空间
	printf("&a=%p\n", &a);//%p专门打印地址
	int* pa = &a;//pa是用来存放地址,C语言中pa叫指针变量
	printf("pa=%p\n", pa);
	// * 说明pa是指针变量
	//int 说明pa的执行对象是int类型的

	int b = 10;
	int* pb = &b;//*解引用操作 *pb通过pb的地址找到b
	*pb = 20;
	printf("b=%d\n", b);//20

	char ch = 'A';
	char* pc = &ch;
	*pc = 'B';
	printf("ch=%c\n", ch);
		
	return 0;
}

初识C语言(2)_第22张图片

  • 指针变量的大小
    对于32位平台,有32根地址线,其地址对应bit位的个数为32字节长度为4所以32位平台的指针长度均为4个字节。
    对于64位平台,有64根地址线,其地址对应bit位的个数为64字节长度为8所以64位平台的指针长度均为8个字节。
    32位平台:
    初识C语言(2)_第23张图片
    64位平台
    初识C语言(2)_第24张图片

13.结构体

结构体可以让C语言创建新的类型

struct Stu
{
     
	char name[20];//成员变量
	int age;
	double score;
};
int main()
{
     
	struct Stu s = {
      "张三", 20, 85.5 };//结构体的创建和初始化
	printf("1:姓名:%s 年龄:%d 成绩:%lf\n", s.name, s.age, s.score);//结构体变量.成员变量

	struct Stu * pa = &s;
	printf("2:姓名:%s 年龄:%d 成绩:%lf\n", (*pa).name, (*pa).age, (*pa).score);

	printf("3:姓名:%s 年龄:%d 成绩:%lf\n", pa->name, pa->age, pa->score);
	//结构体指针->成员变量名
	return 0;
}

初识C语言(2)_第25张图片

你可能感兴趣的:(笔记,c语言)