C语言学习笔记(2)初识C语言(二)

本文详细介绍了C语言中的算术运算符如加减乘除,位移和位操作符,包括右移、与、或、异或,以及赋值操作符、单目运算符、关系和逻辑操作符的用法。还涵盖了条件操作符(三目表达式)和逗号表达式,以及下标引用、函数调用和结构体的基础概念。
摘要由CSDN通过智能技术生成

9.操作符

算数操作符

在这里插入图片描述

#include<stdio.h>
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;
}

在这里插入图片描述

位移操作符

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
右移操作符类似

位操作符

在这里插入图片描述

#include<stdio.h>
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;
}

在这里插入图片描述

赋值操作符

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

单目操作符

在这里插入图片描述

#include<stdio.h>
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;
}

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
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;
}

在这里插入图片描述

#include<stdio.h>
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;
}

在这里插入图片描述

关系操作符

在这里插入图片描述

逻辑操作符

在这里插入图片描述

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

在这里插入图片描述

#include<stdio.h>
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

在这里插入图片描述

逗号表达式

在这里插入图片描述

#include<stdio.h>
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;
}

在这里插入图片描述

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

在这里插入图片描述

//下标引用
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<stdio.h>
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;
}

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

11.#define定义常量和宏

//define定义常量
#include<stdio.h>
#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;
}

在这里插入图片描述

12.指针

  • 内存

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

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;
}

在这里插入图片描述

  • 指针变量的大小
    对于32位平台,有32根地址线,其地址对应bit位的个数为32字节长度为4所以32位平台的指针长度均为4个字节。
    对于64位平台,有64根地址线,其地址对应bit位的个数为64字节长度为8所以64位平台的指针长度均为8个字节。
    32位平台:
    在这里插入图片描述
    64位平台
    在这里插入图片描述

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;
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值