一,数据类型

先来运行一段代码,求出每种数据类型的字节长度

 

#include <stdio.h>

int main()

{

    printf("sizeof(char)=%d\n", sizeof(char)); //字符数据类型

    printf("sizeof(short)=%d\n", sizeof(short)); //短整型

    printf("sizeof(int)=%d\n", sizeof(int)); //整形

    printf("sizeof(long)=%d\n", sizeof(long)); //长整型

    printf("sizeof(long long)%d\n", sizeof(long long)); //更长的整形

    printf("sizeof(float)=%d\n", sizeof(float)); //单精度浮点数

    printf("sizeof(double)=%d\n", sizeof(double));  //双精度浮点数             

    printf("sizeof(long double)=%d\n", sizeof(long double));

    return 0;

}

 

  

 

运行结果如图

 

 二,变量常量

1.变量的作用域

1). 局部变量的作用域是变量所在的局部范围。

 2). 全局变量的作用域是整个工程。

2.变量的生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

1). 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

 2). 全局变量的生命周期是:整个程序的生命周期。

3.常量

C语言中的常量和变量的定义的形式有所差异,C语言中的常量分为以下以下几种:

1).字面常量

2).const 修饰的常变量

3).#define 定义的标识符常量

4).枚举常量

三,字符串

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字 符串。

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串 内容。

举例

 

#include<stdio.h>

 int main()

{ char arr1[] = "abc"

char arr2[] = { 'a', 'b', 'c' }; 

char arr3[] = { 'a', 'b', 'c','\0' };

printf("%s\n", arr1);

printf("%s\n", arr2);

printf("%s\n", arr3);

return 0;

}

 

  

 

输出结果如下:

 

 为什么会出现这样的结果呢?原因是这样的

char arr1[] = “abc”;//字符串的结束标志是一个 \0,后面是有一个\0,打印的时候停了下来

char arr2[] = { ‘a’, ‘b’, ‘c’ }; //没有\0结束不了,t的后面是什么不知道,会输出随机值

char arr3[] = { ‘a’, ‘b’, ‘c’,’\0′ ; //有结束标志\0,程序会停下来

对程序进行调试,结果如下,可以看的更加清楚了。

可知数组arr1中有4个元素,arr2有3个元素,arr3中有4个元素。

 

 四,转义字符

我列举了几个常用的转义字符:

\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。

\n 换行

\r 回车

\t 水平制表符

\v 垂直制表符

\ddd ddd表示1~3个八进制的数字。 如: \130 //130表示这个8进制数字转化为十进制后的ascii码值对应的字符

\xdd dd表示2个十六进制数字。 如:\x30 //30表示这个十六进制数转化为十进制后ascii码值对应的字符

举一个很有趣的例子

 

#include <stdio.h>

int main()

{    printf("c:\code\test.c\n");

    return 0;

}

 

  

 

大家猜一猜运行结果是什么呢,它是这样的:

 

 原因就是 \t作为一个水平制表符,所以运行结果就不会显示\t了。

五,操作符

1.算术操作符

  + – * / %

2.移位操作符

<< >>

3.位操作符

按位与 & :只有对应的两个二进位都为1时,结果位才为1;0则为0

按位或|:有一则为一,同时为0才为0

按位异或 ^: 相同为0 ,相异为1

4.赋值操作符

=   +=  -=  *=  /=  &=   ^=   |=    >>=    <<=

5.单目操作符

 ! 逻辑反操作

–           负值

+           正值

&           取地址

 sizeof      操作数的类型长度(以字节为单位

) ~           对一个数的二进制按位取反 

—          前置、后置–

++        前置、后置++

后置++ ,先使用,再加加

int a=10;

b=a++;

a= 11;b=10;

前置加加,先++,再使用

int a=10;

b=++a;

a= 11;b=11;

*           间接访问操作符(解引用操作符)

(类型)       强制类型转换

关系操作符

!=      用于测试“不相等”

==      用于测试“相等”

逻辑操作符

1、逻辑运算符是根据表达式的值来返回真值或是假值。在C语言中没有专门的真值和假值,认定非0为真值,0为假值。

2、逻辑运算符运算规则:

|| 或:两个条件中,只要有一个成立,则结果就成立;

&& 与:两个条件中,两个同时成立,则结果成立,否则不成立;

 

对于 ~这个操作符,可以再来写一段代码:

 

#include<stdio.h>

int main()

{

int a=0;

     printf("%d",~a);

    return 0;

}

 

  

 

运行之后,发现输出结果为 -1

 

 那为什么会是这样的结果,来简单看一下

首先需要知道 :

-1的原码

1000000 0000000 0000000 00000001

反码

1111111 1111111 1111111 11111110

补码

1111111 1111111 1111111 11111111

其次a=0,

00000000 00000000 00000000 00000000 (32个0)

取反-》

 11111111 11111111 11111111 11111111

内存谈的是补码 ,这个是内存里的补码  ,进行减一取反,得到

10000000 00000000 00000000 00000001 

就会发现这个是 -1了。

六,关于static的作用

1.修饰局部变量,使生命周期变长

 

 include <stdio.h>
 void test()
{
    int i = 0; i++;
    printf("%d ", i);
} 
int main() 
    {    int i = 0;
    for(i=0; i<10; i++;
       { 
 test();
}
return 0; 
}

 

 结果如下:

 

 

	#include <stdio.h>
	void test() {
		static int i = 0; i++;
		printf("%d ", i);
	}  int main() 
	
	{    
		 int i = 0;
		for(i=0; i<10; i++) 
		{
			test();
		}
		return 0; 
	}

  结果如下;

 

 

2. 修饰全局变量,让他只能在当前的原文件下使用,改变了作用域(链接属性)

3.修饰函数(改变了作用域(链接属性)),(由外到内)

 七,define 定义常量和宏

define 定义常量 :没有参数

define 定义宏:有参数

八,关键字

auto :声明自动变量

break:跳出当前循环

case:开关语句分支

char :声明字符型变量或函数返回值类型

const :声明只读变量

continue:结束当前循环,开始下一轮循环

default:开关语句中的“默认”分支

do :循环语句的循环体

double :声明双精度浮点型变量或函数返回值类型

else :条件语句否定分支(与 if 连用)

enum :声明枚举类型

extern:声明变量或函数是在其它文件或本文件的其他位置定义

float:声明浮点型变量或函数返回值类型

for:一种循环语句

goto:无条件跳转语句

if:条件语句

int: 声明整型变量或函数

long :声明长整型变量或函数返回值类型

register:声明寄存器变量

return :子程序返回语句(可以带参数,也可不带参数)

short :声明短整型变量或函数

signed:声明有符号类型变量或函数

sizeof:计算数据类型或变量长度(即所占字节数)

static :声明静态变量

struct:声明结构体类型

switch :用于开关语句

typedef:用以给数据类型取别名

unsigned:声明无符号类型变量或函数

union:声明共用体类型

void :声明函数无返回值或无参数,声明无类型指针

volatile:说明变量在程序执行中可被隐含地改变

while :循环语句的循环条件

九,指针

这里先简单介绍一下关于指针的一些知识:

 

内存:划分为三个区域,栈区(局部变量,形式参数),堆区(动态内存分配,malloc,calloc,realloc,free),静态区(全局变量,静态变量)

 内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。

所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地 址。

 

32位机器

32根地址线/数据线

 

00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000001

00000000 00000000 00000000 00000011

10000000 00000000 00000000 00000000

11111111 11111111 11111111 11111111

 

共有2^32个编号

 

 &num;//取出num的地址    printf(“%p\n”, &num);//打印地址,%p–以地址的形式打印

打印第一个字节的地址,最起始位的地址

 

那地址如何存储,需要定义指针变量。

int num = 10;

int *p;//p为一个整形指针变量

p = &num;

 

*p//解引用操作符

 

指针大小在32位平台是4个字节,64位平台是8个字节。

与类型无关。

十,结构体

struct Stu {

    char name[20];//名字  

    int age;      //年龄

    char sex[5];  //性别

    char id[15]; //学号

 };

 



struct Stu s = {"张三", 20, "男", "20180101"};//打印结构体信息 

printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);//.为结构成员访问操作符

//->操作符struct Stu *ps = &s;

printf(“name = %s age = %d sex = %s id = %s\n”, ps->name, ps->age, ps->sex, ps>id);

 

以上是关于c语言一些模块简单的排版与介绍,Enjoy It,本文到此结束,谢谢!

 

版权声明:本文为lienguang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lienguang/p/12013732.html