![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
C语言学习心得
sniper_fandc
这个作者很懒,什么都没留下…
展开
-
关于头文件和头文件分文件处理
在vs2019中,如果用普通的方式即#include<>来写头文件,当头文件调用过多是会使程序文件显得赘余,今天在练习习题的时候,学到一种分文件处理,这是一种很好的处理方式。第一步创建头文件 在头文件选择新建项,然后选择上图的头文件,名称要和源文件的文件名称一致,后缀为.h表示这是头文件。第二步定义自己的头文件按照上图格式,定义头文件,注意文件名大写和后缀_H,在其中即可写自己所需的头文件引用、宏定义和变量及函数的声明。第三步在源文件导入定义的...原创 2021-11-20 17:17:10 · 1021 阅读 · 0 评论 -
关于VS2019中对scanf的报错问题
scanf报错在是VS2019独有的,运行会显示是不安全,可以选择使用scanf_s替换,但是并不推荐使用scanf_s替换,这个是vs特有的,并不适合其他编译器,所以在代码跨编译器运行时会出错,下面有两种解决方法:第一种在源文件第一行输入下面的代码:#define _CRT_SECURE_NO_WARNINGS第二种方式是使用这行代码忽视错误:#pragma warning(disable:4996)还有其他好的建议欢迎码友们提出!...原创 2021-11-20 17:28:02 · 804 阅读 · 1 评论 -
关于整形提升和数据存储之间不可告人的秘密
在学习C语言的过程中,也许大家都会遇到很多char类型数据和int类型数据打交道的,新手在处理时往往会忽视运算符的规则,表面上程序跑对了,背地里啥也不懂,当程序出bug时又一头雾水,今天我就来给大家揭开关于数据的神秘面纱。 有些表达式的操作数在求值的过程中可能需要有自身类型转换为其他类型。这期间就会发生隐式类型转化。C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。 ...原创 2022-01-24 02:22:38 · 346 阅读 · 0 评论 -
辨析数组指针和指针数组
今天在进阶更高级指针的运用时,一开始没有分清数组指针和指针数组,我相信初学者也经常被这两个问题困扰,学过之后我来总结一下这其中的细节,供大家参考。指针数组:本质是数组,内部存放的是指针元素,比如int *p1[10]; 就是一个整形指针的数组。数组指针:本质是指针,指针指向的是数组,比如int(*p2)[10]; 就是一个数组指针,指针指向整形数组。这里有个口诀教大家辨别变量类型,变量先和谁结合,就是谁。[]的优先级高于*,因此定...原创 2022-01-26 21:13:52 · 729 阅读 · 1 评论 -
有关指针与数组的习题练习
char* c[] = { "ENTER","NEW","POINT","FIRST" };char** cp[] = { c + 3,c + 2,c + 1,c };char*** cpp = cp;printf("%s\n", **++cpp);//"POINT",注意运行结束此时cpp指向cp[1]printf("%s\n", *--* ++cpp + 3);//"ER",++优先级高,先执行*--*++cpp,再执行c[0]+3,此时cpp指向cp[2]printf("%s\n", .原创 2022-01-30 20:42:35 · 1089 阅读 · 1 评论 -
C语言模拟实现strlen函数
在实现之前,我们先来了解一下strlen函数的原理size_t strlen ( const char * str );该函数是进行字符串的字符个数进行计数的。需要注意以下3点:1.字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。 2.参数指向的字符串必须要以 '\0' 结束。 3.函数的返回值为size_t,是无符号的//模拟strlen//方法1(计数器)int my_strlen1(co原创 2022-02-21 15:25:11 · 282 阅读 · 1 评论 -
C语言模拟实现strcpy函数
strcpy函数功能:char* strcpy(char * destination, const char * source);该函数是进行字符串拷贝的,同样需注意字符串的结束标志‘\0’,同时函数也会将‘\0’拷贝进目标空间,而且目标空间必须保持可变和空间足够放入原字符串。模拟实现://模拟实现strcpychar* my_strcpy(char* str1, const char* str2) { assert(str1 != NULL); assert(str2 != N原创 2022-02-21 15:34:20 · 334 阅读 · 1 评论 -
C语言模拟实现strcat函数
char * strcat ( char * destination, const char * source );strcat函数主要是进行字符串拼接功能的,需注意字符串必须以 '\0' 结束,目标空间必须有足够的大,能容纳下源字符串的内容,目标空间必须可修改。 模拟实现://模拟实现strcatchar* my_strcat(char* str1, const char* str2){ assert(str1 != NULL); assert(str2 != NULL); ch.原创 2022-02-21 15:38:44 · 604 阅读 · 1 评论 -
C语言模拟实现strstr函数
思路是建立两个循环,外层循环控制指针在源字符串中进行向后移动,内层循环控制与源字符串某个字符的地址相同的目标字符串指针和源字符串该字符指针不断向后移动比较。比如源字符串“123456”和目标字符串“456”,当外层循环指针移动到字符4的地址时,内层循环指针同时开始目标字符串中移动,经过456字符的比较,如果目标字符串指针移动到‘\0’,则说明查找成功。该函数是进行字符串截取的,将需截取的字符串中的目标字符串的第一次出现的首地址返回,如果需要得到某个特定的字符串需要多次截取。原创 2022-02-21 15:59:34 · 296 阅读 · 1 评论 -
C语言模拟实现strcmp函数
int strcmp ( const char * str1, const char * str2 ); 该函数主要是进行字符串的大小比较,比较思路为从字符串的第一个字符开始逐字符根据字符的ascll值大小进行比较,如果相同位置的字符值大,则该字符串大。相关标准规定:第一个字符串大于第二个字符串,则返回大于0的数字 第一个字符串等于第二个字符串,则返回0 第一个字符串小于第二个字符串,则返回小于0的数字模拟实现:思路过程就是,将相同指针位置的字符相减,实际为ascll值相减,根据结原创 2022-02-21 16:06:50 · 398 阅读 · 1 评论 -
C语言模拟实现memcpy函数
void * memcpy ( void * destination, const void * source, size_t num ); 该函数是内存操作的拷贝函数,函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置,在遇到 '\0' 的时候并不会停下来。同时该函数的返回类型和参数类型为void*,这也就说明了该函数的业务逻辑不仅仅可以对字符串进行拷贝,还可以对其他数据类型进行拷贝,这就是它与strcpy函数最大的不同。...原创 2022-02-21 16:48:08 · 600 阅读 · 1 评论 -
动态内存管理经典习题
#include<stdio.h>#include<stdlib.h>void GetMemory(char* p) { p = (char*)malloc(100);}int main() { char* str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); return 0;}上述代码运行会产生什么结果?可以看到程序引发异常,原因就是因为mal...原创 2022-02-25 21:51:48 · 469 阅读 · 1 评论