c
文章平均质量分 54
ccloud11
分享技术就如同分享快乐一样,独乐乐不如众乐乐。
展开
-
c++三目运算符及const关键字的增强
这是在c++中 ,我们可以看到a的值并没有被修改,这是由于c++编译器对const关键字进行了优化,在用const声明的变量会有一个符号表用于保存常量。在c语言中这么写会编译器会报左值必须是可修改的错,这是由于在c语言编译器中 a < b?a : b返回的是具体的值,即10=30,这显然不对。C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方。这是在c语言中运行的结果,通过间接赋值可以修改a变量本身的值。C语言中的三目运算符返回的是变量值,不能作为左值使用。C++中的const常量。原创 2023-02-22 23:46:36 · 121 阅读 · 0 评论 -
c语言之链表
今天来介绍一下c语言如何手写一个单向链表,我们都知道链表是用来提高空间的利用效率的数据结构,其中包括了一个数据域和指针域,数据域用来存储数据,指针域用来指向下一个节点。这边需要注意的是,需要先将新节点指向当前节点,再将前节点指向当前节点。3.插入值函数:需要三个辅助指针变量,即新节点指针变量pM用于创建新节点,pPre指向搜索到的节点的前一个节点,pCur指向搜索到的节点。如图所示,插入一个新的节点就是用前一个节点指向新的节点,然后新节点的指针域指向当前节点即可实现。(2)循环接受用户输入创建新节点。原创 2023-02-02 22:16:29 · 551 阅读 · 0 评论 -
c语言之二级指针
这时候如果直接*p的话就是数字1,再加一个*号的话就是代表1地址中的值,对应之前调试的结果,*myArray的值是0x61616161,这是由于aaaa在内存中的ascii值是97,97的十六进制即是61,一个指针变量的大小是4个字节,如果这样取的话那结果就是取未知内存0x61616161的值,就出现dump的情况。由于[]和*的优先级一致,但是变量是自右向左进行结合的,所以先与[]结合,再与*结合,所以myArray是一个数组,每个数组中存储的char 类型的指针。首先来看指针数组,指针数组的定义方式。原创 2022-11-09 00:44:34 · 903 阅读 · 0 评论 -
c语言之字符串
2、拷贝函数需要在开始的时候判断源字符串和目标字符串是否为空,如果为空的话就不能进行操作,否则会出现向保护地址写入值的情况,就会出现dump情况。这边我们用到一个c语言库提供的函数strstr函数,用于找到子串在一个字符串中第一次出现的位置,在string.h头文件中。可以看到,如果没有分配空间的话就会出现dump的情况,所以在函数中需要进行判断在进行字符串操作。1、字符串是以'\0'字符结尾的,所以在跳出循环后需要将目标字符的结尾加上一个'\0'字符。欲去掉前后空格,返回一个新字符串。原创 2022-11-05 15:13:34 · 357 阅读 · 0 评论 -
C语言指针间接赋值及字符串基本操作
我们可以看到getMem3()函数的作用为通过形参返回拷贝的内存地址及大小,这边是通过一个二级指针来返回拷贝字符串的地址,这即是指针最大的作用,如果不通过指针的话我们就需要返回一个结构体来接收这些,且拷贝赋值会浪费空间。可以看到sizeof操作符合strlen函数的计算结果是不一样的,这是因为字符串末尾自带一个'\0'字符,所以在计算数组大小时会加上一。但是这种方式就不能称为字符串,只能称为字符数组,因为不符合字符串的定义,结尾不是以'\0'结尾的。1.C语言的字符串,以零结尾的字符串。原创 2022-11-01 23:30:05 · 805 阅读 · 0 评论 -
c语言之指针讲解
1.通过指针指向的变量,可以通过*操作所指向的内存,继而改变所指向变量的值。3.无论是多少级的指针,指针的内存大小都是4个字节,这是在32位的编译器上,因为4个字节正好代表32位。通过以上的代码可以分析出,指针所指向的内容必须是可修改,否则进行写内存的时候会出现内存错误。不会改变指针变量的值,只会改变所指的内存块的值。含义3 =左边*p 表示 给内存赋值, =右边*p 表示取值 含义不同切结!在指针使用时,*号表示 操作 指针所指向的内存空间中的值。2.当*p放在等号右边的时候即是读取所指变量的内存。原创 2022-10-16 23:39:29 · 117 阅读 · 0 评论 -
c语言之函数调用的模型
如果是fa在栈中分配的内存在main函数中是不能使用的,但是在fb函数中是可以使用的,因为在执行完fa函数后,fa在栈空间中的内存就被释放了,所以在main函数中无法使用,但是如果过是在堆区里面分配的空间,例如在fb函数内分配的堆空间,在main函数和fa函数中都可以使用,因为堆内存是在程序结束后会释放的。这边可以做个验证,可以先假定往上的内存地址是较大的,先在栈上开辟两块空间,如果先申请的内存地址较小的话就说明栈的开口方向是向上的,因为栈是先进后出的,如果先申请的的内存地址较大的话就说明开口是向下的。原创 2022-10-16 16:37:39 · 307 阅读 · 0 评论 -
c语言内存四区
getMem2函数是从栈上获取地址,由于栈在函数运行结束后就会自动析构该函数开辟在栈上的内存,即buf数组在执行完getMem2函数后就在内存中消失了,所以这时候将他的地址返回出去就会出现打印出来的内存是乱码的。第二个程序由于两个字符串相同,所以编译器认为两个一致的字符串的地址一致,所以传到主函数的地址也是一致的,也就出现p1和p2存储的值相同。运行完第一个程序的内存指向如图所示,由于字符串常量都是放在常量区的,所以由于两个字符串不同即分配的地址也不相同。两个指针所存储的地址都相同。原创 2022-10-13 23:32:30 · 181 阅读 · 0 评论 -
c语言数组做函数形参退化和基础数据类型的剖析
通过打印的内容发现,sizeof(形参)的值为4,我们知道只有指针的大小为4,所以可以判断,数组作为形参的时候编译器会把他当成指针进行处理,为什么会这样呢?主要是因为b代表的是数组首元素的 地址,而&b代表的是整个数组的地址,所以b+1代表的就是b[1]的地址,&b+1代表的就是数组b的地址加上数组的大小。可以看到b和&b的值是语言的,但是b+1和&b+1的地址是不一样的,正好差了数组的大小-1,这是为什么呢?今天学习了一下c语言基础方面的知识,先分享一下数组做函数形参编译器是如何理解的。原创 2022-10-10 23:30:04 · 181 阅读 · 0 评论 -
windows窗口底层实现
现在在windows上实现窗口程序,大部分都是使用qt和mfc来实现的,这两种框架都是基于c++来实现的,也就是说都是通过面向对象的思想来实现的,但在windows底层都是通过面向过程的思想来实现的,所以今天来分享一下如何通过windows底层的方法来实现一个简单的窗口。先由用户触发消息后传递给操作系统,操作系统再将消息放进消息队列中,应用程序一直获取消息队列中的消息,然后再将消息传递给操作系统,操作系统再去调用对应的回调函数(窗口过程)。退出消息操作的话,程序会一直存在,因为程序还在处理消息的处理中。..原创 2022-08-27 23:46:01 · 624 阅读 · 0 评论