
C语言指针详解
文章平均质量分 73
从入门到精通,带你手撕指针,也不过如此
嶔某
再上坡!
展开
-
C语言中动态内存相关的4个函数free、malloc、calloc、realloc,常⻅的动态内存的错误
有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的分配内存,我们⼀定会对内存的⼤⼩做灵活的调整。如果参数 size 为0,malloc的⾏为是标准是未定义的,取决于编译器(在VS2022上malloc会象征性的给你一个地址,当你访问这个地址的时候就会造成越界访问)这时编译器会在内存的另一块空间开辟size大小的地址,并将原空间的数据拷贝到新空间,返回新空间的起始地址。• 如果参数 ptr 指向的空间不是动态开辟的,那free函数的⾏为是未定义的。size 调整之后新⼤⼩。原创 2024-03-23 00:45:06 · 737 阅读 · 0 评论 -
C语言指针从进阶到精通
字符指针变量这里的两段代码很多人以为是吧字符串hello world放在了cp里面,但是事实是将字符串首字母的地址放在cp里面。这⾥str3和str4指向的是⼀个同⼀个常量字符串。C/C++会把常量字符串存储到单独的⼀个内存区域,当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4相同。原创 2024-03-23 23:12:11 · 905 阅读 · 0 评论 -
详解C语言库函数:qsort()
第三段代码则是把我们熟悉的冒泡排序进行了模拟实现qsort,如果你想要对qsort的理解更加深刻或许你可以删掉此代码然后自己写一遍,这会使你的编程思维得到提升,并且会让你对qsort的实现有一个更加全面的认识。是一个函数指针,指向一个有两个参数返回类型为int的函数,我们可以在这个函数里面规定这些数据应该如何排序,如果。(学习的重点应该放在思维的训练上,而不是单纯的这个函数应该如何使用)如果第一个参数小于第二个参数,则返回负整数值,如果第一个参数。于第二个参数,则返回正整数值,如果参数等效,则返回零。原创 2024-03-02 21:51:09 · 464 阅读 · 0 评论 -
详解C语言中:sizeof和strlen的区别
首先我要在此声明sizeof不是函数!不是函数!不是函数!而是一个操作符!(看到operator了吗?)原创 2024-03-03 21:12:20 · 391 阅读 · 0 评论 -
C语言字符函数strncpy,strncat,strstr,strtok,strerror内存函数memcpy,memove,memset,memcmp详解||模拟实现
⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节(和strcmp差不多,memcmp可以比较任何内容)。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。原创 2024-03-15 22:24:23 · 492 阅读 · 0 评论 -
模拟实现C语言库函数(strlen,strcpy,strcat)
三种方法。原创 2024-03-09 18:03:26 · 468 阅读 · 1 评论 -
C语言指针从基础到进阶
还记得上一篇博客出现了这么一段关于用指针访问数组的代码。这里用&arr[0]拿到了数组首元素的地址,但其实数组名在大部分情况下本来就是首元素的地址关于详细情况可以在我的另一篇博客了解:C语言中关于数组名什么情况为首元素地址,什么情况为整个数组的地址的问题。-CSDN博客但是&arr和&arr+1相差40个字节,这就是因为&arr是数组的地址,+1操作是跳过整个数组的。这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和arr都是。原创 2024-03-10 23:56:12 · 1000 阅读 · 1 评论 -
C语言中关于数组名什么情况为首元素地址,什么情况为整个数组的地址的问题。
但是&arr和&arr+1相差40个字节,这就是因为&arr是数组的地址,+1操作是跳过整个数组的。这⾥我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和arr都是。• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)• sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表示整个数组,计算的是整个数组的⼤⼩,除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址。原创 2024-03-10 23:22:16 · 566 阅读 · 1 评论 -
C语言指针部分易错
关于assert宏,它是一个断言,在写代码的过程中,如果要使用assert,就要包括头文件。否则就终止程序,这在代码的调试中很常用,我们通过定义NDEBUG宏来进行assert的禁用。sizeof(i)的值为4,而i为-1,此时如果以为选择B就万事大吉了的话,那也太小看此题了。B:int (*ptr)[10]这是一个数组指针,代码的意思是将整个的数组地址(&arr)放进这个数组指针里面,没有问题。D:前面说了&arr表示整个数组的地址,把整个数组的地址放进一个指针里面是不可行的。原创 2024-02-22 16:47:39 · 947 阅读 · 1 评论 -
C语言指针从入门到基础详解(非常详细)
我们知道电脑中的CPU在处理数据的时候需要在内存中读取数据处理后的数据也会放在内存中。把内存划分为一个个的内存单元每个单元的大小是一个字节。每个字节都有它对应的编号也就是它的地址,以便CPU可以快速的找到一个内存空间。C语言中我们把地址叫做指针,所以。原创 2024-03-09 18:23:28 · 1108 阅读 · 1 评论