程序员成长之旅——初识c语言(浅谈)

本文详细介绍了C语言的基础知识,包括第一个程序、数据类型、变量、常量、字符串、注释、选择与循环语句等内容,并深入探讨了函数、数组、操作符、关键字等核心概念。

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

c语言是什么?

C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

第一个c语言程序

#include<stdio.h>
int main()
{
	printf("hello\n");
	return 0;
}

数据类型

char             //字符数据类型
short            //短整型
int                //整形
long            //长整型
long long     //更长的整形
float               //单精度浮点数
double         //双精度浮点数

变量常量

一般普通变量:如123,3.5,“abc”, ‘a’ 很容易识别以变量形式展现的,要看标识符的定义形式,才能确定该标识符是常量,还是变量,如:const int a=5 ; //常量 有const修饰,变量不能修改int b=34; //变量#define 定义的宏,即不是常量也不是变量

变量的定义
int age=50;
float weight=45f;
char ch='d';
变量的分类
  • 局部变量
  • 全局变量
#include<stdio.h>
int global=2019;//全局变量
int main()
{
	int local=2018;//局部变量
	//下面定义的global会不会有问题
	int global=2020;//局部变量
	printf("global = %d\n", global);
	return 0;
}

在这里插入图片描述

总结:上面代码是没有任何问题的,当局部变量和全局变量相遇时优先局部变量。

变量的使用

在这里插入图片描述

变量的作用域和生命周期

作用域

作用域(score)程序设计概念,一段程序代码中所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程。
    生命周期

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

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期是:整个程序的生命周期。
常量

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

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
enum Sex
{
        MALE,//枚举常量
	FEMALE,
	SECRET
};
int main()
{
        3.14;//字面常量
	1000;//字面常量
	const float pai = 3.14f;  //const 修饰的常量
	pai = 5.14;//ok?
#define MAX 100            //#define的标识符常量    
	system("pause");
	return 0;
}

字符串+转义字符+注释

字符串
"hello \n"

这种由双引号引起来的一串字符称为字符串字面值,简称字符串。
注意:字符串结束标志是一个\0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

转义字符

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

注释
  • 代码中有不需要的代码可以直接删除,也可以注释掉
  • 代码中有些比较难懂的可以加一下注释文字
    比如:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdio.h>
int Add(int x, int y)
{
 	return x + y;
}
/*C语言风格注释//不能嵌套注释
int Sub(int x, int y)
{
   	 return x-y;
}
*/
int main()
{
 	//C++注释风格//可以注释一行也可以注释多行
 	//int a = 10;
 	//调用Add函数,完成加法
 	printf("%d\n", Add(1, 2));
 	return 0;
}

选择语句

C语言条件控制语句选择结构,是属于计算机的语言编辑,有在C语言条件控制中的语句选择结构的存在,即是C语言条件控制语句选择结构。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
int main()
{
	 int coding = 0;
 	printf("你会去敲代码吗?(选择1 or 0):>");
 	scanf("%d", &coding);
 	if (coding == 1)
	 {
 		 printf("坚持,你会有好offer\n");
	 }
 	else
 	{
  		printf("放弃,回家卖红薯\n");
	 }
 	system("pause"); 
        return 0;
}

循环语句

C语言循环控制语句是一个基于C语言的编程语句,该语句主要有while循环语句、do-while循环语句和for循环语句来实现循环结构。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int mian()
{
 	printf("作为一个程序员");
 	int line = 0;
 	while (line <= 20000)
	 {
 		 line++;
  		printf("我要继续努力敲代码\n");
	 }
	 if (line> 20000)
 	printf("赢取白富美\n");
 	system("pause");
 	return 0;
}

函数

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 	int num1 = 0;
 	int num2 = 0;
 	int sum = 0;
	 printf("输入两个操作数:>");
 	scanf("%d %d", &num1, &num2);
 	sum = num1 + num2;
 	printf("sum = %d\n", sum);
 	return 0;
}

函数的特点就是简化代码,上述代码写成函数如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int Add(int x, int y)
{
 	int z = x + y;
	return z;
}
int main()
{
 	int num1 = 0;
 	int num2 = 0;
 	int sum = 0;
 	printf("输入两个操作数:>");
 	scanf("%d %d", &num1, &num2);
 	sum = Add(num1, num2);
 	printf("sum = %d\n", sum);
 	system("pause");
 	return 0;
}

数组

所谓数组,是有序的元素序列。
[1]
若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。
[2]
这些无序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。

数组的定义
int arr[10]={ 1,2,3,4,5,6,7,8,9,10 };//定义一个整形数组,最多放10个元素
数组的使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 	int i = 0;
 	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
 	for (i = 0; i < 10; i++)
	 {
 	 	printf("%d ", arr[i]);
 	}
 	printf("\n");
 	return 0;
}

操作符

指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。

算数操作符

+   -   *    /    %

移位操作符

>>      <<

位操作符

&    ^   |

赋值操作符

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

单目操作符

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

关系操作符

>      >=    <   <=   !=   ==

逻辑操作符

&&           逻辑与
||           逻辑或

条件操作符

exp1 ? exp2 : exp3

逗号表达式

exp1,exp2,exp3,  ...... expN

下标引用丶函数调用和结构成员

[]   ()     .   ->

常见关键字

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
关键字 typedef

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;
}
关键字 static

在c语言中:
static 是用来修饰变量和函数的

  1. 修饰局部变量
  2. 修饰全局变量
  3. 修饰函数
修饰局部变量

在这里插入图片描述
在这里插入图片描述

对比上面两个代码可以发现当static修饰局部变量时,它改变了变量的生命周期,让静态局部变量除了作用域依然存在,到程序结束,生命周期才结束。

修饰全局变量
//代码1
int g_val = 2018;
//test.c
int main()
{
 printf("%d\n", g_val);
 return 0;
}
//代码2
//add.c
static int g_val = 2018;
//test.c
int main()
{
 printf("%d\n", g_val);
 return 0;
}

对比可知,代码1正常,代码2会出现连结性错误。由此可知,一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件使用。

修饰函数
//代码1
//add.c
int Add(int x, int y)
{
 return c + y;
}
//test.c
int main()
{
 printf("%d\n", Add(2, 3));
 return 0;
}
//代码2
//add.c
static int Add(int x, int y)
{
 return c + y;
}
//test.c
int main()
{
 printf("%d\n", Add(2, 3));
 return 0;
}

代码1正常,代码2错误。由此可知一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

#define定义常量和宏

在这里插入图片描述

指针

内存

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

#include <stdio.h>
int main()
{
	 int num = 10;
	 int* p = &num;
 	 *p = 20;
 	 return 0;
}

以整形指针为例,可以推广到其他类型,如:

#include <stdio.h>
int main()
{
 	char ch = 'w';
 	char* pc = &ch;
 	*pc = 'q';
 	printf("%c\n", ch);
 	return 0;
}
指针变量的大小
#include <stdio.h>
int main()
{
 	 printf("%d\n", sizeof(char*));
	 printf("%d\n", sizeof(short*));
 	 printf("%d\n", sizeof(int*));
	 printf("%d\n", sizeof(double*));
	 return 0;
}

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

结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含: 名字 + 年龄 + 性别 + 学号 这几项信息。
这里只能使用结构体来描述了。

例如:

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从零出发——

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值