初识C语言之二

 操作符

C语言提供丰富的操作符,使用起来比较灵活.

C语言中,0表示假,非0表示真

sizeof是一个单目操作符,不是一个函数  !!!!

算数操作符: + - * / %(取模) ;

除号的两端都是整数时,进行的时整数除法.当有一端是浮点数是进行浮点数除法.

取模运算符两端必须是整数.

移位操作符, 涉及二进制的运算,后面补充.: >>  <<   (  左移\右移  )

位操作符:  & ^ |

赋值操作符: =   +=   -=   *=    /=   ^=   &=   |=   >>=    <<=                           

        (本质上是=与其他操作符的结合)

单目操作符:

        只有一个操作数的操作符  !(逻辑取反)        -(负号)       +(正号)       &(取地址)        

        sizeof(是个操作符,计算字节数,单位是字节) 

int arr[10];
printf("%d\n", sizeof(arr));     //结果4
printf("%d\n", sizeof(arr[0]));  //结果40
printf("%d\n", sizeof(arr)/sizeof(arr[0]));//计算数组的元素个数

          ~(二进制取反)       

        --(自减) / ++(自加) :

int a=10;
int b=a++;  //b=10,a=11 后置++,先使用,后++;
int c=++a;  //c=12,a=12 前置++,先++后使用.

        *(见解访问操作符,或者解引用操作符)

        (类型):强制转换符

int a = (int)3.14;

关系操作符: <  >  ==  <=   >= 

        C语言里的赋值是   =

        C语言里的相等是   ==

逻辑操作符:  &&(逻辑与,且)         ||(逻辑或,或)           

条件操作符:   exp1 ? exp2 : exp3 (C语言里唯一的三目操作符).

        解释:若exp1为真,则exp运算;否则exp2运算.三目运算符是可以嵌套的.

逗号表达式:逗号隔开的一串表达式.

        逗号表达式的特点:从左向右计算,整个表达式的结果是最后一个表达式的结果.

下标引用操作符: [  ].

arr[n]=20;//[]是下标引用操作符,n和arr是它的两个操作数

函数调用操作符: ( )

sum=Add(2,3);//()是函数调用操作符,Add 2 3是()的操作数

关键字

C语言提供了丰富的关键字,这些关键字都是语言设置的,用户不能添加或改变.

详情见:C语言中的关键字及常用语句_c语言的常用关键字-CSDN博客

变量的命名:

1.有意义

2.名字必须是字母 数字 下划线组成,不能有特殊字符,同时不能以数字开头.

3.变量名不能是关键字


typedef :类型重命名
typedef unsigned int uint;

typedef struct Node
{
    int data;
    struct Node* next;
}Node;//typedef重新定义struct Node,此时Node等价于struct Node

为复杂的类型名定义一个简单易用的名称.


static:静态声明

1.static修饰局部变量---->静态变量

局部变量出了作用域,不销毁

本质上,static修饰局部变量的时候,改变了变量的存储位置.(栈区----->静态区)

存储位置的改变影响变量的生命周期,静态变量和程序的生命周期一样长.

2.static修饰全局变量--->仍然存放在静态区

  • 全局变量具有外部链接属性

其他源文件(.c)就可以使用

  •  static修饰的全局变量时,这个全局变量的外部链接属性就变为内部链接属性.

        其他源文件(.c)就不能使用

3.static修饰函数

  • 函数具有外部链接属性的,在源文件(.c)中使用extern声明就可以使用
  • static修饰的函数,本来的外部链接属性变为内部连接属性;既是被extern声明也无法被其他文件使用

register 寄存器关键字


define:定义常量和宏

define不是关键字!!!!

define是预处理指令!!!

1.define定义标识符常量

#define NUM 100

2.define定义宏

:宏是有参数的

#define ADD(x,y)      ((x)+(y))
//     宏名 宏的参数     宏体

 宏含有三部分:宏名 宏的参数 宏体,宏的参数是无类型的.

栈区----->局部变量

堆区----->动态内存管理:malloc/free calloc realloc

静态区-->存放静态变量 全局变量

.h 头文件(函数声明、类型声明、头文件的包含)

.c 源文件(函数实现)

浮点数的四舍五入,不能用肉眼看的数值来计算!!!

以为浮点数在内存中有可能不能精确保存


指针

内存会划分为一个个的内存单元,每个内存单元都有一个编号.

一个内存单元是一个字节(1Byte=8bit)

32位电脑--->32根地址线(4GB的内存大小)

int main()
{
	int a = 10;//向内存申请4个字节,存储10
	//&a;		   //取地址操作
	printf("%p\n",&a);//000000F2041EFA04
	int* p = &a;//p存放a的地址
	//p就是指针变量

	return 0;
}

 内存单元有编号--->即地址--->地址也被称为指针

存放指针(地址)的变量称为指针变量.

区分:指针和指针变量

int *  p = &a;

int    说明p指向的对象是int类型的

*      说明p是指针变量

&a   才是指针(地址)

只要是存放在指针变量中的数据就可认为是指针(地址)

*p     解引用操作符,意思是通过p中存放的地址,找到p所指向的对象,*p就是p指向的对象

&a    取地址取的是存放变量的第一个地址(若a是int型{4个字节}的,那么取a的地址就是取a的第一个字节)

指针变量的大小

  1. 不管是什么类型的指针,都是在创建指针变量。
  2. 指针变量是用来存放地址(指针)的。
  3. 指针变量的大小取决于一个地址存放时需要多大的空间
  4. 32位机器的上的地址:32bit位    -      4byte,所以指针变量的大小是4个字节。
  5. 64位机器的上的地址:64bit位    -      64byte,所以指针变量的大小是8个字节。

书写习惯:一*只能定义一个指针变量;最好是把它们写一块

int  *p1, *p2 , p3; //p1,p2是指针变量;p3是int型变量

结构体

C语言提供了一些自定义的类型,结构体是其中一种。

结构体是把一些单一类型组合在一起的做法。

人为定义的类型定义的叫对象(含有多种变量)。

结构体定义的是类型,没有开辟空间;只有在创建对象,才能开辟空间占用内存

结构体成员的两种使用方式:

  1. 结构体对象.成员名
  2. 结构体指针->成员名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值