初识C语言(三)

本文介绍了C语言中的各种操作符,包括算术、移位、位操作、单目、关系和条件操作符,以及逗号表达式和下标引用。此外,还概述了常见的C语言关键字,如auto、default、define、enum、static、typedef和register,并讨论了编译、链接、指针和结构体的概念。文章提供了相关资源以深入理解C语言的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作符

算术操作符:

/为除运算符 %为求模运算符

24/7;24为被除数,5为除数。 24/5=4.....余数为4  所以 24%5=4

float c = 10 / 3.0; //int double-> double 3.333333
printf("%f\n", c);

float c =10 % 3 ;//求模运算符两边必须为整数。

当结果要求出现小数时,两边的数至少一个为小数才行 10.0或3.0。

取模运算符两边必须为整数。

移位运算符:

移动的是二进制位,必须把十进制转换为二进制才可以使用(后续会讲)

位操作符:

也是对二进制位进行操作。

单目操作符:

单目操作符只有一个操作数的操作符。如a+b,是两个操作数

    int a = 10;
	//int b = ++a;//前置++,先++,后使用
	//a=a+1;b=a;

	int b = a++;//后置++,先使用,后++
	//b=a;a=a+1;
	printf("a=%d b=%d\n", a, b);//11 10

	int a = 10;
	//int b = --a;//前置--,先--,再使用
    printf("a=%d b=%d\n", a, b);// 9 9

    int a = 10;
	int b = a--;//后置--,先使用,再--
	printf("a=%d b=%d\n", a, b);//9 10

强制类型转换

 当计算时两个整型相除则需要对一边的整型进行强制类型转换为float,才能得到小数,否则得到整型

	int a = (int)3.14;//强制类型转换
	printf("%d\n", a);

关系操作符

 条件操作符

 

    int a = 3;
	int b = 5;
	int m = 0;
	if (a > b)
		m = a;
	else
		m = b;
//一个意思 
	m = ((a > b) ? a : b);

如果exp1值正确则m的值为exp2 否则为exp3

逗号表达式

最后一个表达式是d的值

下标引用

    int arr[10] = { 1,2,3,4,5};
	[]就是下标引用操作符
	[]的操作数是arr和4

	printf("hello");//()就是函数调用操作符
	()的操作数是函数名printf,第二个就是"hello"
	
    int m = Max(2, 3);
	()的操作数是Max,2,3

总结:

以下网站总结了C语言的优先级和结合性易错点

请移步网站:http://c.biancheng.net/view/161.html

常见关键字

auto  break   case  char  const   continue  default  do   double else  enum   
extern float  for   goto  if   int   long  register    return   short  signed
sizeof   static struct  switch  typedef union  unsigned   void  volatile  while

这些关键字都是语言提前设定好的,用户不能直接创造关键字

auto

自动变量,主要功能是:进入该变量代码块时生成离开代码块时销毁,局部变量本来就有这个功能,因此auto本来是应该 aotu int sum;只是省略掉了。

 

default

switch中case都不成立时执行的语句

define

#define  标识符  常量   //注意, 最后没有分号

 宏定义常量:

//define定义标识符常量
#define MAX 1000

宏定义函数:

定义函数时define 函数名 (变量名) 计算表达式(计算表达式每个变量一定要单独括号括起来,要不然会出现以下情况)

 错误做法:

正确做法:

enum

枚举变量本质上是define的另一种形式。

#define  标识符  常量   //注意, 最后没有分号
#define valueName1 1
enum typeName{ valueName1, valueName2, valueName3, ...... };

enum是一个新的关键字,专门用来定义枚举类型。typeName表示枚举类型的名字;valueName1,valueName2.。。。是每个值对应的名字列表(注意,最后的;不能少)

当没给valueName1这些赋值时默认从0开始递增。

enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };

这时enum week相当于数据类型,因此可以定义 enum week a,b,c;

enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;

也可以在定义枚举类型时同时定义变量。

enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat

有了枚举变量就可以把列表中的值赋给他。

注意两点!

一:枚举列表中的Mon Tues Wed这些标识符的作用范围是全局的,不能再定义与它们名字相同的变量。

二:Mon Tues Wed等都是常量,不能对它们赋值,只能将它们的值赋给其他变量。

static

一:当用在局部变量时

#include <stdio.h>
int sum(int a)
{
    int c = 0;
    static int b = 3;
    c += 1;
    b += 2;
    return (a + b + c);
}
int main()
{
    int i;
    int a = 2;
    for (i = 0; i < 5; i++) 
    { 
        printf("%d,", sum(a)); 
    } 
} 

二:当用在全局变量时

当全局变量前加了static时,这个全局变量只能在这个源文件中使用不能在另一个源文件使用。

三:当用在函数时

static总结

typedef

类型重命名

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
    //观察num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    return 0; }

register

寄存器关键词

计算机有一种存储器是集成在CPU上的叫寄存器(cpu和寄存器之间进行独显 资料交换 寄存器将资料传给cpu进行处理后显示还给寄存器)

编译和链接 

多个源文件.c 可以产生一 一对应的obj目标文件,obj目标文件进行链接(打包)后才会形成可执行程序.exe(详细解释请看网站:http://c.biancheng.net/view/1736.html)

指针

内存

内存是计算机的存储器,计算机的程序都在内存中运行的,每个内存单元是一个字节,每个单元都有相应的地址。

 int num = 10;
 &num;//取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
 printf("%p\n", &num);//打印地址,%p是以地址的形式打印
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的

一个变量四个字节有四个地址一般打印出的是第一个地址。

该变量地址需要指针进行存储

 int num = 10;
 int *p = &num;
 //*p=10   p=&num

 指针前面的数据类型取决于他执行的对象类型

指针自身也占内存,所占字节取决于32位还是64位机器。不管他所执行的对象是char 还是double 也不会影响到他本身占内存所需字节。

 结构体 struct

struct Stu
{
    char name[20];//名字
    int age;      //年龄
    char sex[5];  //性别
    char id[15]; //学号
}

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值