![](https://img-blog.csdnimg.cn/20210728135443244.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
C语言
chengwei1128
努力成为技术大佬的小白。
联系邮箱:1509832650@qq.com
展开
-
【C语言】数组指针和指针数组的用法、区别
数组指针和指针数组,从字面上区分的方法就是:本质看最后两个字。例如数组指针的本质就是一个指针,一个指向数组的指针;而指针数组的本质就是一个数组,一个成员都是指针的数组。1.数组指针1.1 基本概念数组指针,即指向一个数组的指针。可以指向一维数组,也可以指向二维数组(三维及以上数组一般不用)。1.2 定义格式int (*p)[n]=NULL;p = 数组名; //当数组是一维数组时,直接写数组名编译器会警告,但是运行正常。写成“&数组名”不会警告。对于二维及以上数组,直接写数组名不会原创 2020-07-04 13:39:59 · 1538 阅读 · 0 评论 -
【C语言】充当右值时,数组名前加不加&的区别
假设数组名是buf。则buf和&buf充当右值时的区别是:buf是数组首元素的首字节地址;&buf是整个数组的首地址。解释:这两个在值上是相等的,但是意义及数据类型不相同。&buf作右值时,只能赋值给“数组指针类型”的指针变量,即&buf得到的是一个数组指针。buf作右值时,只能赋给普通的指针变量,该指针变量的类型要和数组的数据类型一致。意义不相同会导致他们在参与运算的时候有不同的表现(有什么不同?见下例)。【例】#include <stdio原创 2020-07-04 13:09:10 · 1364 阅读 · 0 评论 -
【C语言】有符号数的原码、反码、补码的区别与转换
1.正数的原码、反码、补码均完全一样。2.负数的反码:符号位不变,其它位取反。3.负数的补码:符号位不变,其它位取反,最后加1。4.计算机采用补码方式来储存数据。n位二进制有符号数据的补码表示范围:[−2n−1,2n−1−1][-2^{n-1} ,2^{n-1}-1][−2n−1,2n−1−1]。n位二进制无符号数据(正数)的补码(三码相同)表示范围:[0,2n−1][0 ,2^{n}-1][0,2n−1]。6.补码的补码是原码。7.负数的原码和补码互相转换简单方法:从原码(或补码)的右原创 2020-06-16 21:01:56 · 1140 阅读 · 0 评论 -
【C语言】运算符*和++的优先级关系及两者结合使用分析
运算符*和++都属于单目运算符,两者的优先级是一样的,结合性的方向是从右到左。首先,关于++运算符的特性,我们需要了解一下。++在前,则变量先自身加1,然后参与所在表达式的其它运算;++在后,则变量首先参与所在表达式的运算,然后在当前语句最后结束前(以分号作为结束标志)自身加1。见下例://///////////////////////////代码1int p=5;int i;i=...原创 2019-10-31 15:17:56 · 11434 阅读 · 1 评论 -
位操作---置位(置1)、清除和取反
我们在对寄存器进行编程时,通常需要对寄存器中的某一位进行置位或清除操作,但是同时我们又不能影响其它位。所以接下来讲解具体如何对相应位进行置位或清除操作。1、置位1.1含义就是将数据的某些位设为1。1.2做法采用 “或”运算 和 移位。这种做法的特点就是:在对目标位进行置位时,不影响(改变)其它位.如何不改变其它位呢?就是其它位进行“或”运算的对象都是0.例:1.将a的第...原创 2019-05-09 14:55:07 · 24620 阅读 · 7 评论 -
【C语言】原码、反码和补码之间的区别及转换计算
总结:这里补充讲解一下原码:原码原码就是用左边第一位表示符号, 其余位表示绝对值. 符号位:正数为0,负数为1.比如如果是8位二进制:[+1]原 = 0000 0001[-1]原 = 1000 0001第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]即[-127 , 127],原码是人脑最容易理解和计算的表...原创 2019-09-15 20:43:16 · 1995 阅读 · 0 评论 -
【C语言】野指针产生的原因、危害和规避方法
1.野指针产生的原因:1、定义指针变量的同时未对其进行初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会指向随机区域,因为任何指针变量(除了static修饰的指针变量)在被定义的时候是不会被置空的,它的默认值是随机的。2、指针所指向的内存空间被释放时,却没有对该指针变量的值(即该指针原来指向的内存空间的地址)进行置空:我们在用库函数malloc开辟内存空间时,要检查返回值是否为空,...原创 2019-09-14 21:35:17 · 4311 阅读 · 0 评论 -
【C语言】void和void *的区别
1.void的用法在C语言中void 常用于2个方面:对函数返回类型的限定和对函数参数限定。 (1)对函数返回类型的限定:当函数不需要返回类型是必须用void 来限定返回类型,限定了函数的返回类型为void后,函数不能有返回值。如:void fun(int a);(2)对函数参数类型的限定:当函数不允许接受参数时,必须用void 来限定函数参数,限定了函数的参数类型为void后函数不能有...原创 2019-08-29 15:07:31 · 1653 阅读 · 0 评论 -
【C语言】continue, break和return跳转语句的区别
循环体中:1.break有时候我们想在某种条件出现的时候终止循环而不是等到循环条件为false才终止。这是我们可以使用break来完成。break用于完全结束一个循环,跳出循环体,执行循环体后面的下一条语句。2.continuecontinue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。可以理解为continue是跳...原创 2019-07-09 22:27:01 · 450 阅读 · 0 评论 -
C语言工程内如何调用其它文件的函数和变量?
C语言代码是以“文件”为单位组织进行的。下面我们通过两个问题的解答,进而展开讲解。问题1:同一个工程内,b.c文件如何调用a.c内的全局变量(非静态)和函数(非静态)呢?答:有两种方法。第1种方法:在b.c文件头部中,直接添加用extern声明要调用的全局变量、函数的语句即可。(声明全局变量时必须加extern关键字;声明函数时加不加都行,不过建议加上,增加代码可阅读性)第2种方...原创 2019-07-09 20:00:14 · 19187 阅读 · 2 评论 -
【C语言】运算符优先级
同一优先级的运算符,运算次序由结合方向所决定。原创 2019-07-08 20:06:19 · 173 阅读 · 0 评论 -
【C语言】结构体变量的初始化方法
结构体变量的初始化方法1.定义结构体变量并同时对其初始化这里介绍三种方法:顺序法乱序法C++风格的乱序struct student{ int score; const char *name;}1.1 顺序法按照结构体成员的声明顺序进行初始化。struct student stu1={98,"li ming"};1.2 乱序法特点:成员顺序可以不定,Linux ...原创 2019-07-07 17:08:03 · 9403 阅读 · 0 评论 -
【C语言】函数定义时前加static 作用
C语言中函数定义时前加static 作用1.作用函数中加“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。2.好处使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。3.根本原因根本原因是C语言中同一个工程中不能有同名函数。定义静态函数的好处:其他文件中可以定义相同名字的函数,不会发生冲...原创 2019-07-07 16:53:49 · 11321 阅读 · 1 评论 -
【C语言】结构体指针
C语言之结构体指针结构体指针,即为指向一种结构体类型的指针。1.一般定义法struct student{ int num; int grade;} ;struct student *p_student; //定义了一个指向struct student类型结构的指针。结构体指针p_student可以指向任一属于struct student类型结构的的结构体变量。2.加上typ...原创 2019-07-07 16:44:27 · 3066 阅读 · 0 评论 -
【C语言】函数指针(指向函数的指针)
一、函数指针的定义一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,即指针指向该函数的内存首地址,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。p=函数名;//p为指针变量二、函数指针的定义形式returnTy...原创 2019-06-16 19:56:28 · 2988 阅读 · 0 评论