初识C语言,教你读懂C语言,理清C语言脉络,真正入门C语言(函数数组操作符常见关键字#define定义常量和宏指针和结构体等相关内容)
Posted 只是代表你
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识C语言,教你读懂C语言,理清C语言脉络,真正入门C语言(函数数组操作符常见关键字#define定义常量和宏指针和结构体等相关内容)相关的知识,希望对你有一定的参考价值。
因为为初识C语言,目的在于大家能看懂简单的C程序为主,所讲的内容主要为基本内容,更加详细的知识将在后面详细解剖
数组
仅以一维数组为例,二维或多维在此处不涉及
- 数组的定义
C语言中给了数组的定义:一组相同类型元素的集合。
数据类型 数组名[整型常量表达式]
注意整型常量表达式中只能有整型常量或字符型常量,不能包含实型常量和变量。例
int a[5];
int a[5+9];
上述都是合法的
int n=20;
int a[n];
上述是不合法的
- 数组的赋值
将数组元素的初始值依次放在一对花括号内且用逗号进行分隔。大括号内的数据类型必须于所定义数组的数据类型一致。
char[3]={'A','B','C'};
int a[3]={1,2,3,};
- 数组的引用
数组在使用使利用下标来进行,数组中元素的下标都是从0开始,即第一个元素的下标为0,若有一个长度为N的数组,最后一个元素的下标为N-1。
int arr[3]={1,2,3};
//定义了一个空间大小为3的数组arr,第一个元素1在arr[0]中
//第三个元素3在arr[2]中
函数
函数的特点就是简化代码,代码复用。对于要用到的一种特定性能,我们可以提前设定好,在使用的时候调用他。如下,计算两数相加
#include<stdio.h>
int Add(int x,int y)
{
return x+y;
}
int main()
{
int a,b;
scanf("%d",&a,&b);
sum=Add(a,b);
printf("%d",Add);
return 0;
}
操作符
- 算术操作符
% * / + -
/两边为整数结果为整数,有一个小数结果为小数 5/2=2 5.0/2=2.5
%求余两个操作数必须为整数 - 移位操作符
1、<<左移操作符
左移几位剩余的部分补几位0
int a=6;
int b=a<<1;//将a的二进制位左移一位的值给b,注意a的值并没有改变
2、>>右移操作符
右移设计整数提升问题,不在此处讲解
- 位操作符
& 按二进制为与,对应的二进制位只要有0就是0
int a=3; int b=5
int c=a&b;
a=00000000000000000000000000000011
b=00000000000000000000000000000101
c=00000000000000000000000000000001
^ 按二进制位异或 相同为0,相异为1
int a=3; int b=5
int c=a^b;
a=00000000000000000000000000000011
b=00000000000000000000000000000101
c000000000000000000000000000000110
| 按二进制位或 二进制位只有有一个1就为1
int a=3; int b=5
int c=a^b;
a=00000000000000000000000000000011
b=00000000000000000000000000000101
c=00000000000000000000000000000111
- 赋值操作符
= -= += *= /= %= <<= >>= - 关系操作符
==
>=
<=
!=
<
>
- 单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 计算操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置
++ 前置、后置
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
常见关键字
关键字是C语言内置好的,可以使用这些关键字,但自己定义的符号不能和这些关键字冲突。一些常见的关键字如下:
- auto自动变量关键字。 局部变量就是自动变量,自动创建自动销毁
#include<stdio.h>
int main()
{
auto int i;
int i;两种写法意思一样,现在使用的过程中自动将auto省略
return 0;
}
- break-停止,中断,用于循环、switch case语句
- continue用于跳出本次循环,不能用于switch语句
- const常属性
- default是switch语句里的收尾,默认选项
- do while、while、for循环关键字
- if、if else、switch选择关键字
- enum枚举关键字、struct结构体关键字
- union联合体(共用体)关键字
- volatile主要在于Linux系统中讲解
- typedef类型定义,可以理解为类型重命名。 给unsigned int重新起了个名字uint,可拿unit定义变量`
#include<stdio.h>
typedef unsigned int unit
int main()
{
unsigned int num=100;
uint num1=100;
return 0;
}
- register寄存器关键字
#include<stdio.h>
int mian()
{
register int num=9;
#//这中写法错误
return 0;
}
register int num=100;建议把100存放到寄存器中,编译器最终决定。寄存器是独立于内存的空间,所以寄存器变量不能取地址
- static在C语言中的用法:1、修饰局部变量 2、修饰全部变量 3、修饰函数
1、修饰局部变量
被static修饰的变量进入函数创建,出函数不销毁,生命周期和程序的生命周期差不多,但不会改变作用域。
#include<stdio.h>
void vest1()
{
int a=0;
a++;
printf("%d",a);
}
vest2()
{
static int a=0;
a++;
return 0;
}
int main()
{
int i=0;
for(i;i<10;i++)
{
vest1();//1 1 1 1 1 1 1 1 1 1
vest2()//1 2 3 4 5 6 7 8 9 10
}
return 0;
}
2、修饰全局变量
默认一个全局变量是具有【外部】链接属性的,如果全局变量被static修饰,是全局变量的外部链接属性变成了内部链接属性,这个时候这个全局变量只能在本源文件内部使用。
其他源文件无法链接到,也无法使用!
3、修饰函数
用法和修饰全局变量类似,函数具有外部连接属性,如果被static修饰,外部链接属性变成了内部链接属性。函数只能在自己的源文件内部使用,不能在其他源文件内部使用!!!
#define定义常量和宏
- 定义常量 #define MUM 100
- 定义宏 #define MAX(X,Y) (X>Y?X:Y) 使用过程中参数替换进宏体
#include<stdio.h>
#define NUM 100
#defien MAX(X,Y) (X>Y?X:Y)
int main()
指针
-
内存
内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
-
内存的编号(地址)怎么产生 在32位机器下,有32根地址线(物理的电线),通电时有正负电,转换成数字信号后正为1,负为0,形成32位二进制序列,共有2的32次方个序列
-
一个内存单元是一个字节byte
-
地址怎么拿取的
拿到的是a的第一个地址,顺腾摸瓜向下拿到所有地址 -
指针变量的大小
指针大小在32位平台是4个字节,64位平台是8个字节。 -
*解引用操作符
int a=10;
int *p=&a;
*p=122; *表示通过p里面存放的a的地址,找到a,对a的数据进行操作
结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含: 名字+年龄+性别+学号这几项信息。这里只能使用结构体来描述了。如下
#include<stdio.h>
//声明结构体类型
struct Student
{
//成员变量
char name[];
int age;
char sex[5];
char id[12];
};
int main()
{
//创建的结构体变量及其初始化
struct Student s1={"zhangsan",20,nan,2020};
struct Student s2;
struct Studengt*p=&s1;
//打印 .操作符 结构体变量.成员名
printf("name:%s age:%d\\n",s1.name,s1.age);
//-> 结构体指针->成员名
printf("%s,%d",p->name,p->age);
return 0;
}
以上是关于初识C语言,教你读懂C语言,理清C语言脉络,真正入门C语言(函数数组操作符常见关键字#define定义常量和宏指针和结构体等相关内容)的主要内容,如果未能解决你的问题,请参考以下文章