c语言知识学习
文章平均质量分 75
c语言知识学习
Shimir
笨鸟坚持飞下去,慢慢积累经验
展开
-
了解数组越界访问的危害性-通过调试来观察
arr[ ] 中[ ]里面的i不会超过15,而 i 的值不会超过15,在编写的代码范围中,i原创 2024-02-01 21:30:54 · 567 阅读 · 0 评论 -
malloc()和free()
free()函数的参数是之前malloc()返回的地址,该函数释放之前malloc()分配的内存。• 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者来决定。• 如果参数 string 指向的空间不是动态开辟的,那free函数的行为是未定义的。• 如果开辟失败,则返回⼀个 NULL 指针,因此malloc的返回值⼀定要做检查。• 如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。• 如果开辟成功,则返回⼀个指向开辟好空间的指针。原创 2024-01-26 09:00:00 · 609 阅读 · 0 评论 -
大小端字节序和字节序判断
其实超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储,下面是具体的概念:大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容保存在内存的低地址处。小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容保存在内存的高地址处。调试的时候,我们可以看到在a中的 0x11223344 这个数字是按照字节为单位,倒着存储的。原创 2024-01-25 14:53:44 · 422 阅读 · 0 评论 -
C语言学习NO.14-字符函数(四)-字符串查找,strstr函数,strtok函数
• strtok函数找到string中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。• strtok函数的第一个参数不为 NULL ,函数将找到string中第一个标记,strtok函数将保存它在字符串中的位置。• strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。• 如果字符串中不存在更多的标记,则返回 NULL 指针。原创 2024-01-07 09:30:00 · 699 阅读 · 0 评论 -
C语言学习NO.13-字符函数(三)-strncpy,strncat,strncmp长度受限制的字符串函数
•使用时需要包含头文件• 将源字符串的前num个字符复制到目标。如果源C字符串的末尾在复制num个字符之前找到'\0',剩下自动记0,直到总共写入了num个字符。•拷贝num个字符从源字符串到目标空间。•如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。•使用时需要包含头文件• 将源的前num个字符追加到目标,再加上一个终止的null字符。(将来源指向字符串的前号码个字符追加到目的地指向的字符串末尾,再追加一个 \原创 2024-01-06 16:00:00 · 967 阅读 · 0 评论 -
C语言学习NO.12-字符函数(二)-strcpy,strcat,strcmp长度不受限制的字符串函数
• 源字符串必须以 '\0' 结束,会将源字符串中的 '\0' 拷贝到目标空间。当源字符串空间大于目标空间时,使用strcpy函数会有怎样的结果?存在错误,自身附加自身的字符串时,字符串的'\0'很容易被覆盖。• 注意strcpy需要包含的头文件是 如下例,字符中的'\0'也会同样被赋值进目标空间。• 目标空间必须足够大,以确保能存放源字符串。•strcpy函数返回的是目标空间的起始地址。• 目标空间必须可修改。原创 2024-01-06 14:00:00 · 607 阅读 · 0 评论 -
C语言学习NO.11-字符函数strlen,strlen函数的使用,与三种strlen函数的模拟实现
如果用str++ 先使用 后自增 这里的使用表示传参 所以就只会把a的地址传进去 就不符合我们的预期了。strlen的返回值类型是无符号型,无符号型-无符号型还是无符号型,因此最后的结果一定是大于0的。在程序进行中,每次进入新阶段前,str的地址发生了改变,但是进入新阶段后,仍是原地址。所以这里如果这样写 传进去的那个地址值就还是原本的指向。• 参数指向的字符串必须要以 '\0' 结束。str所指向的地址发生了变化。为何输出的结果与预期的不同?二、使用++str的调试结果。一、str++的调试结果。原创 2024-01-05 17:36:23 · 1114 阅读 · 0 评论 -
C语言学习NO.10-指针(二)数组名的理解,使用指针访问数组,一维数组传参的本质,冒泡排序,二级指针,指针数组,指针数组模拟二维数组
同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,也是转换成首元素的地址+偏移量求出元素的地址,然后解引用来访问的。这个代码搞明白后,我们再试一下,如果我们再分析一下,数组名arr是数组⾸元素的地址,可以赋值给p,其实数组名arr和p在这里是等价的。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型一维数组,parr[i][j]就是整型一维数组中的元素。现在在函数内部计算数组的元素个数,我们可以吧函数传给一个函数后,在函数的内部求数组的元素个数。原创 2023-12-23 16:51:15 · 820 阅读 · 0 评论 -
C语言学习NO.9-指针(一)内存和地址,指针变量,指针变类型的意义,const修饰指针,指针运算,野指针,assret断言,指针的使用和传址调用
称为“直接访问”。如**printf(“%d”,i);原创 2023-12-23 17:02:56 · 922 阅读 · 0 评论 -
C语言学习NO.8-操作符(二)二进制相关的操作符,原码、反码、补码是什么,左移右移操作符、按位与,按位或,按位异或,按位取反
操作符的分类在C语言学习NO.2中操作符中已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作符。也在NO.2操作符中介绍了整型常量的不同进制关系,今天来更详细地介绍操作符中和⼆进制有关系的操作符。详细见C语言学习NO.2-操作符的整形常量的不同进制关系。整数的2进制表示方法有三种,即原码、反码和补码 2进制序列中,有符号整数的三种表示方法均有**符号位(最左侧数字)和数值位(除符号位剩余位)**两部分。对于整形来说:数据存放内存中其实存放的是补码。为什么呢? 在计算机系统中,数值一律原创 2023-12-17 19:00:00 · 685 阅读 · 0 评论 -
C语言学习NO.7-函数(二)函数递归
程序调用自身的编程技巧称为递归( recursion),递归函数一定要有结束条件,否则会产生死递归,导致栈溢出(Stack overflow)。//main函数中又调用了main函数return 0;} //程序会一直打印 Hello递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,使用递归可以在解决一些复杂问题时将问题简单化,降低编程难度。递归的主要思考方式在于:把大事化小递归就是递推回归的意思。原创 2023-12-28 15:12:54 · 996 阅读 · 0 评论 -
C语言学习NO.7-函数(一)
ret_type fun_name(形式参数)ret_type是函数返回类型fun_name是函数名括号中放的是形式参数{}括起来的是函数体ret_type 是用来表示函数计算结果的类型,有时候返回类型可以是 void ,表示什么都不返回;fun_name 是为了方便使用函数,所以函数名尽量要根据函数的功能起的有意义,方便调用;函数的参数就相当于工厂中送进去的原材料,函数的参数也可以是 void ,明确表示函数没有参数。如果有参数,要交代清楚参数的类型和名字,以及参数个数;原创 2023-12-14 19:00:00 · 942 阅读 · 1 评论 -
C语言学习NO.6-二维数组的概念、创建、初始化、使用、存储
同样通过下标来访问二维数组的元素,例如设 i 为行的下标,j 为列的下标。从输出结果来看,每一行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元素,如:arr[0][4]和arr[1][0]之间也是差4个字节,所以。将一维数组作为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组。二维数组的访问也是使用下标的形式的,二维数组是有行和列的,只要锁定了行和列就能唯一锁定数组中的一个元素。原创 2023-11-29 21:23:36 · 7482 阅读 · 1 评论 -
C语言学习NO.5-一维数组创建、初始化、使用、存储,变长数组
这里的结果是10,表示数组有10个元素,以后在代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,不管数组怎么变化,计算出的大小也就随着变化了。我们又知道数组中所有元素的类型都是相同的,那只要计算出一个元素所占字节的个数,数组的元素个数就能算出来。在C99标准之前,C语言在创建数组的时候,数组大小的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小。有了前面的知识,我们其实使用数组基本没有什么障碍了,如果我们要深入了解数组,我们最好能了解一下数组在内存中的存储。原创 2023-11-28 22:10:18 · 1791 阅读 · 0 评论 -
C语言学习NO.4-break和continue语句;while,for,do…while循环语句
C语言学习NO.4-break和continue语句;while,for,do…while循环语句原创 2023-11-25 17:29:01 · 943 阅读 · 0 评论 -
C语言学习NO.3-分支_if和switch
C语言学习NO.3-分支:if和switch原创 2023-11-24 19:07:51 · 821 阅读 · 1 评论 -
C语言学习NO.2-操作符(运算符)一,语句分类,整型常量的不同进制(二进制,八进制,十进制,十六进制),scanf函数
操作符(运算符)一,语句分类,整形常量的不同进制,scanf函数原创 2023-11-23 09:43:23 · 961 阅读 · 0 评论 -
C语言学习NO.1-main函数、printf函数输入输出,关键字,字符(串),常变量,数据类型
C语言学习NO. 1-main函数、pint函数输入输出, 关键字,字符(串) ,常变量,数据类型原创 2023-11-22 17:10:05 · 321 阅读 · 0 评论 -
分支语句-if语句
if语句的结构,注意事项原创 2023-11-21 14:05:00 · 32 阅读 · 0 评论 -
关于sizeof和strlen计算数组中字符数组和字符串数组的大小
sizeof 一种计算机编程语言中的操作符,用于计算数据类型或变量的存储大小,可以用于计算一个数组的大小。也可用于其他数据类型,如字符串、结构体和指针等。strlen 一种计算机编程语言中的函数,用于计算 字符串的长度,可以用于计算一个字符串的长度。也可用于其他数据类型,如数组和指针等。原创 2023-11-20 09:20:40 · 369 阅读 · 0 评论