C语言基础新印象

今天又从理念上更好的理解了一些C语言的基础知识,不再片面的看待变量、常量等一系列C语言基本概念与语法,接下来我就自己的新感受记下来,以备后面复习学习使用。

0 什么是Git,什么是GitHub?

今天我大致了解了Git的意思,他是版本管理服务器。举个例子,现实生活中,我们写的实验报告,经常会改动好几次,第一次写的是版本一,第二次写的是版本二,其实版本二是我们在版本一的基础上增加了一些新东西形成的版本二,那么我们就需要保存好版本一,在需要增加东西的时候,直接把版本一拿过来增加就可以了,那么Git就是替我们保管版本一的服务器。

现在我们知道了Git,那么什么是GitHub呢,很简单,GitHub就是Git的网页版而已。

1 什么是C语言?

我的感受就是,这是一个古老而经典的计算机编程语言,经久不衰是因为连linux操作系统都是用他写的,可见它是相当厉害的!C语言与其他面向对象的语言(Java、c++)等不同,它是专门面向过程的一门语言,进行一些计算机底层的开发,而面向过程最主要的就是函数。

2 第一个C语言程序

其实我们在vs源文件test.c里写的我们能看懂的代码,就是一个文本而已,存在磁盘上,计算机并不认识这些文本,他只认识0和1组成的一长串序列,那么计算机如何执行我们写得代码程序呢?很简单,vs提供了一个简单的编译器,编译器把我们写的代码翻译成计算机能够认识的01序列,编译器编译代码之后会生成一个以.exe结尾的可执行程文件,这样就可以让计算机运行我们的代码了。32位计算机就是从CPU出来的地址总线是32根,64位计算机就是从CPU中出来的地址总线是64根。

3 数据类型

一谈到数据类型,首先我们就要想到对应类型的 内存空间。这个很重要,一定要记住!!!

计算机的数据类型分为内置类型自定义类型。

内置类型有:字符型         char      (1个字节的内存空间) (字符型也是一种整型)

                      短整型        short      (2个字节的内存空间)                                   

                        整型           int         (4个字节的内存空间)

                      长整型        long       (4个字节的内存空间)(随环境改变大小)

                      更长整型  long long  (8个字节的内存空间)

                    单精度浮点数 float      (4个字节的内存空间)

                    双精度浮点数 double  (8个字节的内存空间)

#include <stdio.h>
#include <windows.h>

int main()
{
	printf("char   -> %d\n", sizeof(char));
	printf("short  -> %d\n", sizeof(short));
	printf("int    -> %d\n", sizeof(int));
	printf("long   -> %d\n", sizeof(long));
	printf("ll     -> %d\n", sizeof(long long));
	printf("float  -> %d\n", sizeof(float));
	printf("double -> %d\n", sizeof(double));
	system("pause");
	return 0;
}

看完各种类型的大小,我们现在看看如何使用这些类型,

比如:    char a = 'w';    C语言定义字符必须使用单引号,定义字符串必须使用双引号,随后有定义字符实例。

               int i = 1000;    double d = 3.14;

 

说完内置类型,现在再说说自定义类型:例如   数组类型,指针类型,结构体等等,以下会有介绍

数组类型:   char  a[3] = {0, 1, 2};

指针类型:   char *p = "abcdefg";   (p是指针变量(p 的大小是4个字节),存放的是字符 a 的地址) 

结构体类型:struct stu

                     {

                                char name[10];

                                 int age;

                                char sex;

                                  int id;

                     }; 

 

4  常量   变量

常量就是不会改变的量,常量有四种:

(1)字面常量    12;  w;  3.14   

  (2)   const 修饰的常变量   const  int a = 20;    变量a 的值不能改变

(3)定义标识符常量    #define   MAX 100       MAX 就是 100   

(4)枚举常量        enum   sex                (性别)

                                {

                                      man,        (常量)

                                      feman,     (常量)

                                      secert      (常量)

                                };   

 

变量

一提到变量,就要想到   内存空间+空间内容

变量其实就是内存空间的一个代号,变量就像一个盒子,里面装有东西而已。变量分为局部变量和全局变量。

局部变量只在函数内部起作用。       (电信学院学生会主席只在电信院起作用)

全局变量在整个工程都可以起作用。(校学生会主席在全校起作用)

局部变量和全局变量如果同名,则局部变量优先使用。

(#pragma waring (disable: 4996))取消scasnf()函数接口的警告(了解就可以了)

 

变量的作用域:

局部变量作用域在变量所在的局部范围内

全局变量的作用域在整个工程内

 

变量的生命周期:

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

全局变量的生命周期是 :从创建全局变量开始,到整个程序结束。

 

6 字符串

"hello world!"    这种由双引号引起来的一串字符,叫做字符串字面值,或者称为字符串。

字符串以一个 '\0' 作为结束标志,但是它不是字符串的内容。

 

7  转义字符  '\'

字符 '0' 不等于数据 0     但是  '\0' == 0      只有给字符 '0' 前面加一个转移字符反斜杠  '\',就把字符0转换为  常量0

反斜杠 '\'  作用:特殊字符转为普通字符     普通字符转为特殊字符

#include <stdio.h>
#include <windows.h>

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

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

	system("pause");
	return 0;
}

结果:

接下来让我们看一道经典的笔试题:

#include <stdio.h>
#include <windows.h>

int main()
{
	printf("%d\n", strlen("abcdef"));
	//  \32被解析为一个字符
	printf("%d\n", strlen("c:\test\32\test.c"));

    system("pause");
    return 0;
}

第一个毫无疑问,一共6个字符,所以输出6;第二个输出多少呢?我们知道 '\' 是一个转移字符,所以字符串内 \t   \32  \t  这三个应该看做是三个字符,加上空格字符,一共13个字符,输出13,那么我们验证一下,看对不对?

7.1 注释

 //          c++的注释风格    

/*    */    c语言的注释风格  (注意不可嵌套使用)

现在我们来看一个有注释作用的特殊例子

#include <stdio.h>
#include <windows.h>

int main()
{

	if (0)
	{
		printf("hello bit...\n");
		printf("hello world!\n");
	}

	system("pause");
	return 0;
}

可以看出,什么都没有输出!!!为神魔呢?其实很简单,因为 if (0)语句是判断语句,C语言中认为 0 表示假,则计算机经过判断之后认为条件为假,所以始终不执行 if  { }  内部的语句,所以内部语句相当于被注释掉了,但是我们要清楚,这并不是注释语句!!!!!!!

8.1 选择语句

if (表达式)   { 语句 }                 switch(表达式){

else of (表达式) { 语句 }         case 表达式:语句;  break;。。。(break 不能忘记,否则程序按顺序会依次往下执行语句)  

else (表达式)  { 语句 }               default:语句;  break;

 

8.2 循环语句

主要包括三个条件:  初始化条件    判断条件     更新条件                                          初始化条件

for (初始化条件;判断条件;更新条件)           初始化条件;                                  do 

{ 语句 }                                                                  while ( 判断条件 )                            {   循环语句  } 

                                                                             {   语句      更新条件 }                       while (判断条件)

 

9 数组     

数组是自定义类型,相同类型的组合。                                                           

特别注意一些细节如下:

#include <stdio.h>
#include <windows.h>

int main()
{
	char arr[5] = {1,2,3,4,5};
	printf("%d\n", sizeof(arr));//sizeof后单独使用数组名,算出的是整个数组的大小
	printf("%d\n", sizeof(arr[0]));//此时得到的结果是第一个字符的大小

	printf("%d\n", sizeof("happy"));//这个字符串共占有的内存空间大小,要加上最后的'\0'(6)
	printf("%d\n", strlen("happy"));//有效字符串个数 (5)

	system("pause");
	return 0;
}

结果:

10 函数

函数真的很重要,一个人不可能自己干完所有事,那样太累而且会时常出错,main()函数就像一个人一样,不能自己干完所有事,因此定义函数去完成特定的工作,这样既不影响main()函数内部整体的进度,同时我们可以很快的定义出哪个函数模块出问题了,可以很快针对问题进行修改调试。完美的函数,我喜欢。总而言之就是:简化代码  和   代码复用  作用。    

举个例子:

#include <stdio.h>
#include <windows.h>

int main()
{
	int a = 0;
	int b = 0;
	int num = 0;
	printf("请输入俩个操作数:>");
	scanf("%d%d", &a, &b);
	num = a + b;
	printf("num = %d\n", num);
	system("pause");
	return 0;
}

我们看到在main函数内部直接一口气写完了所有语句,你会不会感觉有点复杂了呢,是不是觉得代码有点长,那么你在看看下面的代码,感受一下:

#pragma warning(disable:4996)  

#include <stdio.h>
#include <windows.h>

int ADD(int x, int y)
{
	return x + y;
}

int main()
{
	int a = 0;
	int b = 0;
	int num = 0;
	printf("请输入俩个操作数:>");
	scanf("%d%d", &a, &b);
	num = ADD(a, b);
	printf("num = %d\n", num);
	system("pause");
	return 0;
}

11 操作符

算术操作符:+   -   *       %(取模、取余)

移位操作符: >> 右移     << 左移

位操作符:   & 按位与(一个0  则就是 0)        | 按位或(一个1 则就是1)           ^ 按位异或(相异为1    相同为0)

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

单目操作符:

!          逻辑取反操作符
-            负值
+           正值
&           取地址
sizeof    操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--           前置、后置--
++         前置、后置++
*            间接访问操作符(解引用操作符)

(类型)    强制类型转换

关系操作符:  >  >=    <     <=     == (注意,很容易写成=,一般把常量放在前面  5 == num)      !=

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

条件操作符:exp1  ?   exp2   :   exp3       exp1真   返回exp2    exp1假    返回exp3

逗号表达式:(exp1,  exp2,   exp3)   从左往右依次计算   最终取值由最后一个表达式决定

下标引用  [ ]     函数调用 ( )    访问结构体成员   . 点      ->   箭头    

 

12 常见关键字

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      while    volatile

typedef   类型重定义

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef   unsigned int   uint_32;

 关键字static
在C语言中:
static是用来修饰变量和函数的
1. 修饰局部变量 : 延长局部变量的生命周期,不改变作用域
2. 修饰全局变量 : 把默认的外部链接属性改为内部链接属性,使得全局变量只能在当前文件中使用
3. 修饰函数        : 把默认的外部链接属性改为内部链接属性 ,使得函数只能在当前文件中使用,其他文件无法调用该函数

13 #define  定义标识符常量和宏

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))

14 指针

内存

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

 

 

 

 

 

 

15 结构体

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值