C语言基础知识分享续篇

目录
  • 写在前面
  • 数组
    • 数组使用
  • 函数
  • 字符串
    • strlen && sizeof
      • sizeof
      • strlen
    • 转义字符
  • 操作符
  • 选择语句
    • if else
    • switch
  • 循环语句
    • for
    • while
    • do while
  • 跳出语句
    • contine
    • break
  • 指针
  • 自定义类型
    • struct

写在前面

好了,现在我们开始C语言的第二个部分.今天我们需要看下面几个知识点,都是非常简单的,我们主要认识一下.

数组

我们知道一个一个属性可以用一个类型去表示,那么我想问的是如果是一个属性的多个呢?也就是多个一样的东西,此时我们就要使用数组来进行表示,所谓的数组就是存储数据的容器,保证多个数据的数据类型要一致,C语言中给了数组的定义:一组相同类型元素的集合.

数组使用

我们想要存储1~10这几个数据我们应该如何存储?很简单.

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素数组访问

注意了,如果我们没有在[]中具体元素的个数,那么我们实际存储元素的个数按照后面初始化的个数来进行计算,如果给了实际元素的个数,那么我们后面最多存储元素就是规定的元素个数.我们如果访问数组的元素,那么我们就要依赖数组的下标,记住数组的下标是从0开始的,这一点非常重要.

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;
}

函数

所谓的函数我们可以称之为是代码的功能的集合,我们把程序不同的功能写成一个个函数,这样我们后面是可以再其他地方重复调用的.其中main函数也是一个函数.函数的基本结构是

放回置 函数名(参数列表)
{
函数体
}

我们来实现一个打印1-10的函数.

void Print()
{
for (int i = 0; i < 10; i++)
{
printf("%d ",i+1); // ??)--]-三字母词
}
}

我们调用函数只需要用函数名和相关的参数就可以了.

int main()
{
Print();
return 0;
}

字符串

在C语言中用一对""括起来的字符我们称之为字符串,就像"hello world".注意我们C语言是没有字符串类型的,大家不要搞错了就行.

在C语言中字符串的末尾其实隐藏着一个'\0';y也就是只要你使用双引号输入一个字符串,它的末尾就是自动携带一个'\0'来作为字符串的结束标志,实际在内存中,上面的字符串是这样的“hello world\0"末尾带了一个'\0'来作为结束标志.我们验证一下.

#include <stdio.h>
int main()
{
char * str = "hello world";

return 0;
}

上面我们验证的还是不太清楚,这里我们再次看一个现象.

#include <stdio.h>
int main()
{
char arr1[] = { 'a', 'b', 'c', 'd' };
char arr2[] = { 'a', 'b', 'c', 'd','\0' };
char* arr3 = "abcd";
printf("arr1 %s\n", arr1);
printf("arr2 %s\n", arr2);
printf("arr3 %s\n", arr3);
return 0;
}

也就是所谓的字符串我们可以这样认为,我们可以认为他们是字符数组,但是字符数组最后我们一定要带上一个'\0',注意我们是这么理解,实质肯定有所不同,我们先不谈,这涉及到其他的内容.

strlen && sizeof

我们谈到字符串和字符数组我们就不得不说一下strlen和sizeof得区别了,记住了它最大得一个区别,sizeof是关键字,strlen是函数,这是本质得不同.在功能呢上,sizeof计算是我们数组开辟得空间,它的单位是字节,strlen是计算有效字符的个数,所谓的有效字符是指'\0'之前的都是有效字符.

sizeof

我们先来测试一下sizeof关键字.

int main()
{
char arr1[] = { 'a', 'b', 'c', 'd' };
char arr2[] = { 'a', 'b', 'c', 'd', '\0' };
char arr3[10] = { 'a', 'b', 'c', 'd', '\0' };
printf("arr1 %d\n", sizeof(arr1));
printf("arr2 %d\n", sizeof(arr2));
printf("arr3 %d\n", sizeof(arr3));

return 0;
}

这个我们已经知道了,那么我们这里在和大家说一下sizeof的的用法,我们sizeof既可以计算类型的大小,也可以计算变量占据空间的大小.

int main()
{
int a = 0;
printf("int %d\n", sizeof(int));
printf("a %d\n", sizeof(a));
return 0;
}

但是我们计算类型和计算变量是有一点区别的,计算变量我们可以不带括号.

int main()
{
int a = 0;

printf("a %d\n", sizeof a);

return 0;
}

但是我们参数是类型的时候我们必须带上括号.

int main()
{
int a = 0;

printf("int %d\n", sizeof int);

return 0;
}

strlen

下面我们开始用一下strlen函数,这个是在标准库string.h中的,我们使用前需要引入头文件.strlen函数就是为了寻找字符'\0',知道知道'\0',否则我们会一直计数.

int main()
{
char arr1[] = { 'a', 'b', 'c', 'd' };
char arr2[] = { 'a', 'b', 'c', 'd', '\0' };
char* arr3 = "abcd";
printf("arr1 %d\n", strlen(arr1));
printf("arr2 %d\n", strlen(arr2));
printf("arr3 %d\n", strlen(arr3));

return 0;
}

转义字符

假如我们要在屏幕上打印一个目录:c:\code\test.c.我们该如何写代码,是不是按部就班的直接复制粘贴.看一下现象.

int main()
{

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

return 0;
}

此时我们就会发现和我们想的有点不太一样.是我们想错了吗?不是的,是大家缺了一个知识点.在C语言中,为了我们数据的打印更加优美,此时添加了很多的转义字符.什么是转义字符,这个就是改变了原本意思的字符.今天我们用一下常见的转义字符.


转义字符


说明


\?


在书写连续多个问号时使用,防止他们被解析成三字母词


\\'


用于表示字符常量'


\“


用于表示一个字符串内部的双引号


\\


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


\a


警告字符,蜂鸣


\b


退格符


\f


进纸符


\n


换行


\r


回车


\t


水平制表符


\ddd


ddd表示1~3个八进制的数字。 如: \130 X


\xdd


dd表示2个十六进制数字。 如: \x30 0

下面我们认识一下三字母词

int main()
{
printf("(are you ok??)"); // ??)--]-三字母词
return 0;
}

在一些老的编译器??)会被解析成],不过现在的编译器一般不这么干了,我们了解就可了.

我们说一下常见的一些转义字符,其余的就不谈了,有兴趣的自己可以查一查验证一下就可以了,很简单的.

\\\ 如果我们想要打印 字符'\\' ,在\的前面再加一个\就行了\ddd 这里面ddd表示的是3个8进制数,可以使用1-3个8进制数\xdd dd表示的两个十六进制数

下面我们来练习一个习题,我们求一下字符串的长度

#include<stdio.h>
#include <string.h>
int main()
{
char* str = "c:\test\328\test.c";
printf("%d\n", strlen(str));
return 0;
}

这个字符串的长度是4,就是下面的“c : \t e s t \32 8 \t e s t . c”

操作符

这里只是认识,后面的再说吧.

算数操作符: + - * / %逻辑操作符: && ||移位操作符: >> <<赋值操作符: = += -= *= /= &= ^= |= >>= <<=位操作符: & ^ |条件操作符: exp1 ? exp2 : exp3逗号表达式: exp1, exp2, exp3, …expN

下面我们只说一下逗号表达式,所谓的逗号表达式就是我们根据从左到右的规则依次往后面计算,该赋值的赋值,该替换的替换.

int main()
{
int a = 0;
(a = 2 * 6, a * 3, a = a + 5);
printf("a = %d\n", a);
return 0;
}

选择语句

所谓的选择语句就是我们在众多的选项中选择一个符合调价的,我们这里有下面两个类别.

if else

我们先用一下你就明白了,很简单.

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

此时我们就明白了他们的含义,如果我们符合条件,那么我们就执行该条件下的代码.那么我想问一下我们只有这两个个条件吗?不是的,我们也是可以田间else if 的.

int main()
{
int coding = 0;
printf("你会去敲代码吗?(选择1 or 0 or -1):>");
scanf("%d", &coding);
if (coding == 1)
{
printf("坚持,你会有好offer\n");
}
else if (coding == -1)
{
printf("如果你是百万富翁当我没说话\n");
}
else
{
printf("放弃,回家卖红薯\n");
}
return 0;
}

同时我们else if和else都是可以省略的,只保留if,但是我们绝对不可以只让else或者是else的个数多余if.注意else是和它上面最近的if进行匹配的,这里我就不详细的说了,你一验证就明白了.

switch

除了if else选择之外我们还是有另外的一个语法的,这里也是很简单的.

int main()
{
int a = 1;
switch (a)
{

case 1:
printf("%s\n","YES");
break;
case 0:
printf("%s\n", "NO");
break;
default:
printf("%s\n", "选择错误");
break;
}
return 0;
}

switch()的括号的内部元素类型 字节<=4的整型(char int byte short)每一个case后面,除非是特殊业务要求,要带上break;

int main()
{
int a = 1;
switch (a)
{

case 1:
printf("%s\n", "YES");
case 0:
printf("%s\n", "NO");
default:
printf("%s\n", "选择错误");
}
return 0;
}

循环语句

我们刚刚说了选择语句,但是这个语句只会执行一次。由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。那我们怎么做呢?这里就需要循环语句了,这里的循环语句三个。

  • for
  • while
  • do while

for

这个格式是for(表达式1; 表达式2; 表达式3),也是很好用的

表达式1 为初始化部分,用于初始化循环变量的。表达式2 为条件判断部分,用于判断循环时候终止。表达式3 为调整部分,用于循环条件的调整。

int main()
{
for (int i = 0; i < 10; i++)
{

printf("%d ", (i + 1));
}
return 0;
}

这里我们想和大家说一个结论,条件判断部分要比调整部分多上一次,有的选择题会进行考察.

while

我们也是使用它进行打印1-到10的数字,这个也是非常简单的.

int main()
{
int i = 0;
while (i<10)
{

printf("%d ", (i + 1));
i++;
}
return 0;
}

do while

如果说while语句是先进行条件判断,那么dowhile就是先执行代码,后面再进行条件判断.

int main()
{
int i = 0;
do{
printf("i: %d\n",i);

} while (i > 0);

return 0;
}

跳出语句

跳出语句算是对循环语句做一个补充,我们知道,任何一个人都有可能再满足一定情况下结束循环,有的人会等到条件完成后结束,有的人可能中途有添加了另外的条件,此时我们下面的两个关键子都是为了他们准备的.

contine

contine关键字是跳出本次循环,继续下一次的循环.

int main()
{
int i = 0;
while (i < 10)
{
i++;
if (i == 5)
{
continue;
}
printf("i: %d\n", i);

}

return 0;
}

break

break语句更加直接,它是直接结束循环.

int main()
{
int i = 0;
while (i < 10)
{
i++;
if (i == 5)
{
break;
}
printf("i: %d\n", i);

}

return 0;
}

指针

下面我们谈C语言最重要的也是最让人难以理解的一个内容,这我们在后面会重点谈.大家记住,所谓的指针我们就认为它是一个地址,它是指向一个事物的标志,这就是指针的简单理解.根据计算机主线的根数不同,指针分为4字节和8字节,其中32为机器是4字节,64位是8字节.

int main()
{

int a = 10;
int * p = &a; // p 就是一个指针
printf("%d\n", sizeof(p));
return 0;
}

那么我想问的是我们拿到了a的地址,请问我们如何看待a的内容呢?这里可以使用解引用,解引用就是根据地址找到那一片的空间.

int main()
{

int a = 10;
int * p = &a;
printf("a = %d\n", *p);
*p = 20;
printf("a = %d\n", a);

return 0;
}

这里我想和大家说的,任何指针类型的大小只要机器的位数确定,那么我们字节数也就确定了.

struct Student
{
char name[100]; // 姓名
char sex[10];// 性别
int age; // 年龄
};

int main()
{
printf("char %d\n", sizeof(char*));

printf("int %d\n", sizeof(int*));
printf("double %d\n", sizeof(double*));
printf("struct Student %d\n", sizeof(struct Student*));
return 0;
}

自定义类型

上面我们已经知道了自定义类型,也就是int之类的.那么我想问的是如果我们想要描述学生这个属性,我们应该怎么办?此时我们知道用自定义类型是可以描述的,但是我们有点麻烦,这里C语言提供了一个关键字,我们可以使用它来自己定义类型.

struct

这个一个结构体关键字,我们可以这么做.

struct Student
{
char name[100]; // 姓名
char sex[10];// 性别
int age; // 年龄
};

这就是一个结构体,也就是下面的格式

struct 结构体名字
{
// 成员属性
};

这里我们需要记住的是struct 结构体名字才是结构体的类型,大家不要记混了.这里给大家使用一下.

struct Student
{
char name[100]; // 姓名
char sex[10];// 性别
int age; // 年龄
};
int main()
{

struct Student stu = { "张三", "男", 18};
printf("%s %s %d\n", stu.name, stu.sex, stu.age);
return 0;
}

以上就是C语言基础知识分享续篇的详细内容,更多关于C语言基础的资料请关注我们其它相关文章!

(0)

相关推荐

  • C语言菜鸟基础教程之求1到100的和

    题目:求1+2+3+--+98+99+100 (1)用数学方法求解 (2)编写C语言程序求解 解: (1)数学方法 S = 1+2+3+--+98+99+100 = (1+100) + (2+99) + (3+98) + -- + (49+52) + (50+51) = 101 * 50 = 5050 (2)C语言编程 #include <stdio.h> int main() { int sum = 0; // 赋初值 for(int i = 1; i <= 100; i++) { s

  • c语言 树的基础知识(必看篇)

    第一.树的定义: 1.有且只有一个称为根的节点 2.有若干个互不相交的子树,这些子树本身也是一颗树 第二.专业术语: 树的深度:从根节点到最低层,节点的层数 ,称之为树的深度.  根节点是第一层 结点的层次:根节点为第一层,根节点的子节点为第2层,以此类推 叶子节点:没有子节点的节点 非终端节点:实际就是非叶子节点 结点度: 子节点的个数称为度树的度 第三.树的分类 一般树:任意一个节点的子节点的个数不受限制 二叉树:任意一个节点的子节点最多2个,且子节点的位置不可更改 满二叉树:在不增加层数的

  • C语言菜鸟基础教程之加法

    先动手编写程序: #include <stdio.h> int main() { int a = 1; int b = 2; int c = a + b; printf("sum is %d\n", c); return 0; } 运行结果: sum is 3 程序分析: 先定义一个整型变量a,把1赋值给a. 再定义一个整型变量b,把2赋值给b. 最后定义一个整型变量c,它的值不是靠赋值得到的,而是把a和b相加之后的值赋值给它,即c的值为3.

  • C语言基础使用IDE快速开发的方法

    这篇文章介绍一下如何使用CLion进行C语言的开发与调试. CLion CLion是Jeb Brain出品的一款跨平台的C/C++的集成开发环境IDE. 详细介绍: https://www.jetbrains.com/zh-cn/clion/ 下载地址: https://www.jetbrains.com/zh-cn/clion/download/ 官方提供了30天试用的方式,可根据需要进行下载使用. 安装与设定 首先选择缺省主题 然后选择缺省插件 习惯使用vim方式的可以通过点击对应的Inst

  • C语言 map函数的基础用法详解

    目录 map map具体操作 总结 map 有N个学生的姓名name和学号ID,要求给你一个学生的name求查找他的ID. 简单做法是定义 string name [ N ] 和 int ID[ N ] 存储信息,然后在name [ ] 中查找这个学生,找到后输出他的ID.但是这样的缺点是需要查找所有的name [ N ],时间复杂度是O( N ),效率低下. 利用 STL 中 map容器 可以快速实现查找,复杂度是O( log 2 N ). map是关联容器,它实现从键(key)到值(valu

  • C语言菜鸟基础教程之单精度浮点数与双精度浮点数

    上节课 简单介绍了浮点数.计算机程序中的浮点数分为单精度浮点数和双精度浮点数. 单精度和双精度精确的范围不一样. 计算机里的最基本的存储单位用位(bit)来表示.bit只能用来存储0或1. 稍大一点的单位是字节(Byte,简写为B). 再大一级的是千字节(kilo Bytes),用k来表示. 再大一级的单位是兆字节(Mega Bytes),用M来表示.一张照片的大小通常为1~3M. 再大一级的单位为G.一部高清电影的大小通常为1~2G. 再大一级的单位为T. 换算关系为: 1B = 8bit 1

  • C语言学习基础知识分享

    目录 写在前面 为何学习C语言 语言层面 个人层面 初识C语言 什么是语言 标准 helloword main printf 数据类型 byte & bit sizeof 常量 常量分类 变量 定义变量 变量的分类 局部变量 全局变量 局部优先 变量的使用 printf scanf 作用域&生命周期 写在前面 我们正式开始接触到C语言,这是我在学习过C语言后重新写的博客,我把之前的稍微优化了一下,希望能用更加朴素的语言和大家分享,我希望给大家带来一个可以看的懂,理论和实践并行的内容.当然里

  • C语言菜鸟基础教程之Hello World

    首先,需要一款C语言的编译器,可以使用在线编译器,也可以在本地安装编译器,比如Mac电脑可以安装Xcode,PC可以安装Dev C++. 编写第一个程序:Hello World! #include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, World! \n"); return 0; } 运行结果: Hello, World! 程序分析: (1) 这里stdio.h是一个头文件.代表stantard inp

  • C语言菜鸟基础教程之自定义函数

    先动手编写程序: #include <stdio.h> int add(int x, int y) { int z = x + y; return z; } int main() { int a = 1; int b = 2; int c = add(a, b); printf("c = %d\n", c); return 0; } 运行结果: c = 3 程序分析: (1) 函数定义的形式为: 类型 函数名称(类型 形式参数,--) { 函数体 } (2) 对应于咱们的程

  • C语言基础知识分享续篇

    目录 写在前面 数组 数组使用 函数 字符串 strlen && sizeof sizeof strlen 转义字符 操作符 选择语句 if else switch 循环语句 for while do while 跳出语句 contine break 指针 自定义类型 struct 写在前面 好了,现在我们开始C语言的第二个部分.今天我们需要看下面几个知识点,都是非常简单的,我们主要认识一下. 数组 我们知道一个一个属性可以用一个类型去表示,那么我想问的是如果是一个属性的多个呢?也就是多个

  • 模块一 GO语言基础知识-库源码文件

    你已经使用过 Go 语言编写了小命令(或者说微型程序)吗? 当你在编写"Hello, world"的时候,一个源码文件就足够了,虽然这种小玩意儿没什么用,最多能给你一点点莫名的成就感.如果你对这一点点并不满足,别着急,跟着学,我肯定你也可以写出很厉害的程序. 我们在上一篇的文章中学到了命令源码文件的相关知识,那么除了命令源码文件,你还能用 Go 语言编写库源码文件.那么什么是库源码文件呢? 在我的定义中,库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他

  • IOS开发之路--C语言基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用

  • javascript基础知识分享之类与函数化

    1.对象适合于收集和管理数据,容易形成树型结构. Javascript包括一个原型链特性,允许对象继承另一对象的属性.正确的使用它能减少对象的初始化时间和内存消耗. 2.函数它们是javascript的基础模块单元,用于代码复用.信息隐藏和组合调用.函数用于指定对象的行为.一般来说,编程就是将一组需求分解成一组函数和数据结构的技能. 3.模块我们可以使用函数和闭包来构造模块.模块是一个提供接口却隐藏实现状态和实现的函数或对象. 1.自定义类型--构造函数模式(伪类模式) 在基于类的系统中,对象是

  • 使用ARM汇编破解iOS程序基础知识分享

    一.Thumb指令与ARM指令 Thumb指令为16位,因此存储代码的密度高,节省存储空间.但是功能不全,它只是ARM指令(32位)集的补充,是ARM指令集下的一个子集.在初级阶段我们不需要了解这些知识,只要有个概念知道有这么个东西就可以. 二.ARM的寄存器初步了解 R0-R3: 用于函数参数及返回值的传递,超过4个参数,其它参数存在栈中,在ARM中栈是向下生长的,R0还可以作为返回值. R4-R6, R8,R10-R11: 没有特殊规定,就是普通的通用寄存器 R7: 栈帧指针,指向母函数与被

  • Go语言基础知识总结(语法、变量、数值类型、表达式、控制结构等)

    一.语法结构 golang源码采用UTF-8编码.空格包括:空白,tab,换行,回车. - 标识符由字母和数字组成(外加'_'),字母和数字都是Unicode编码. - 注释: 复制代码 代码如下: /* This is a comment; no nesting */ // So is this. 二.字面值(literals)类似C语言中的字面值,但数值不需要符号以及大小标志: 复制代码 代码如下: 23 0x0FF 1.234e7类似C中的字符串,但字符串是Unicode/UTF-8编码的

  • 新手学习PHP的一些基础知识分享

    一,PHP脚本代码标记 PHP的脚本是文件中一对特殊标记所包括的内容,如ASP是"<%....%>",PHP可看成是"<?...?>". 然而为了适应XML标准以将PHP嵌入到XML或XHTML中,PHP不建议使用短格式的"<?...?>",而建议使用长格式标记"<?php...?>" 此外PHP代码块还支持 <script language="php"

  • C语言基础知识变量的作用域和存储方式详细介绍

    变量的作用域和存储方式 1.简述变量按作用域的分类 变量按作用域分:分为全局变量和局部变量 全局变量:在所有函数外部定义的变量叫做全局变量 全局变量的使用范围:从定义位置开始到下面整个程序结束 局部变量:在一个函数内部定义的变量或者函数的形式参数统称为局部变量 局部变量的使用范围:在函数内部定义的变量只能在本函数内部进行使用 2.简述变量按存储方式的分类 静态变量 自动变量 寄存器变量[寄存器就是cpu内部可以存储数据的一些硬件东西] 3.简述全局变量和局部变量命名冲突的问题 1>在一个函数内部

  • 图文详解C语言位运算基础知识

    C语言位运算基础知识分享给大家,希望对大家有帮助. 1.   程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作. 2.  与运算:只有前后两个运算数都是 1 的时候结果才是1. 3.  或运算:有1位为1,结果便为1. 4.  异或:不相同则为1. 5.  取反运算:将1变为0,将0变为1. 6.  移位运算:左移则乘2,右移则除2.如果超出边界,则舍弃. 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • C语言入门之基础知识详解

    一.思维导图 内容不限于此思维导图 二.环境搭建 对于老手,自动跳过这一趴吧,或者也可以看一下我有没有啥纰漏,毕竟小白需要这一趴. 编译器很多,大部分老师会在学生学习C语言的时候推荐使用VC,不带语言提示器的那种,说是可以提高学生的编码能力.我也不知道到底是不是这么一回事儿.我推荐使用VS,这样学的快,函数记不住的问题很严重吗?项目的车轮碾压过去,再记不住也得记住吧!!! 更何况这个系列到后面是会有需要用文本文件编程写项目的阶段. 下载VS2019社区版,不要标新立异选那些最新版的,出了问题到时

随机推荐