C学习中的困惑
小菜鸡的蜕变之路
长路漫漫,若能坚持,未来可期,加油~
展开
-
assert的作用
assert在程序的release版本中仍然有效(不要与VC中的ASSERT混淆),要使assert失效,只有在包含assert头文件(assert.h)的语句前定义NDEBUG宏或在编译器参数中添加-DNDEBUG参数。当构造一个应用程序的时候,应该始终记住:应该让程序在出现bug或非预期的错误的时候,应该让程序尽可能早地突然死亡。这样做可以帮助你在开发——测试循环中尽早地发现错误。不导致突...转载 2019-10-14 10:23:34 · 873 阅读 · 0 评论 -
C语言的四种拷贝函数
头文件:#include<string.h>一、strcpy函数strcpy()函数用来复制字符串,其原型为:char*strcpy(char *dest, const char *src);【参数】dest 为目标字符串指针,src为源字符串指针。注意:src 和 dest 所指的内存区域不能重叠,且 dest必须有足够的空间放置 src 所包含的字符串(包...转载 2019-10-14 10:17:29 · 12060 阅读 · 1 评论 -
静态链接和动态链接区别
1.静态链接与动链接的区别在C语言中,我们知道要生成可执行文件,必须经历两个阶段,即编译、链接。在编译过程中,只有编译,不会涉及到链接。在链接过程中,静态链接和动态链接就出现了区别。静态链接的过程就已经把要链接的内容已经链接到了生成的可执行文件中,就算你在去把静态库删除也不会影响可执行程序的执行;而动态链接这个过程却没有把内容链接...转载 2019-09-22 22:20:55 · 20014 阅读 · 0 评论 -
sizeof总结(字节对齐)
字节 char short float int long *(地址) double 32位 1 2 4 4 4 4 8 64位 1 2 4 4 8 8 ...转载 2019-07-15 21:53:23 · 1145 阅读 · 0 评论 -
位运算总结及相关面试题
短路求值#include<iostream>using namespace std;int main(){ int a = 0; int b = 2; int v = a && ++b; //短路求值,a为0,整个表达式直接为0 cout<<b<<endl; //b未运算,为初始值2 ...原创 2019-07-20 15:52:03 · 200 阅读 · 0 评论 -
大端序和小端序问题及内存分配管理
目录目录一 字节序 大端序和小端序1 代码实现 测试字节序二 C内存地址分配简介三 CC内存区划分具体内容见:https://blog.csdn.net/dcpkeke/article/details/48055847#%E7%9B%AE%E5%BD%95...转载 2019-07-19 16:29:06 · 164 阅读 · 0 评论 -
大小端模式总结
大端:所谓的大端存储,即低地址存放高位数据,高地址存放低位数据。小端:所谓的小端存储,即低地址存放低位数据,高地址存放高位数据。对于一个数据0x12345678,对应大小端存储方式如下:小端存储方式0x00 |78|0x01 |56| 0x02 |34|0x03 |12|大端存储方式0x00 |12|0x01 |34| 0x...原创 2019-07-18 22:50:14 · 183 阅读 · 0 评论 -
实现strlen() 、strcpy()学习笔记
①strlen()参考:https://blog.csdn.net/windyj809/article/details/80037006功能:其用于计算字符串中字符的个数,不包括'\0',遇到'\0'结束。注:1、我们定义的指针不能为空,所以要使用assert进行断言。2、因为是判断字符串长度,所以字符串是不变的,所以用const修饰,使其更加安全。第一种方法,使...转载 2019-07-16 16:45:27 · 169 阅读 · 0 评论 -
尽量避免使用void main()
尽量不要使用voidmain(),因为其可能会有非预期的结果。最好用以下两种方式:第一种"intmain()"第二种"intmain(intargc,char*argv[])"原创 2019-07-16 10:08:59 · 4522 阅读 · 0 评论 -
对*p++与*++p;(*p)++ 与 ++(*p)的理解
参考:https://blog.csdn.net/baidu_37973494/article/details/82761455*p++:等同于:*p; p += 1;解析:由于*和++的运算优先级一样,且是右结合。故*p++相当于*(p++),p先与++结合,然后p++整体再与*结合。前面陈述是一种最常见的错误,很多初学者也是这么理解的。但是,因为++后置的时候,本身含...转载 2019-07-16 08:57:13 · 26858 阅读 · 12 评论 -
复杂指针解析
复杂指针解析-----右左法则(用于理解复杂指针的声明)右左法则----首先从最里面的圆括号看起,然后往右看,再往左看每当遇到圆括号时,就应该调转阅读方向,一旦解析完圆括号里面的所有内容,就跳出圆括号,重复这个过程,直至整个声明解析完毕。应该从未定义的标识符开始阅读,而不是从括号阅读起,之所以是未定义的标识符,是因为一个声明里面可能有多个标识符,单未定义的标识符只会有一个。先热热身~...原创 2019-07-18 09:30:25 · 425 阅读 · 0 评论 -
C语言编译过程详解
IDE的使用让很多和我一样的人对C/C++可执行程序的底层生成一知半解,不利于我们深入理解原理。在这里小结一下,望路过的大神指正~前言:从一个源文件(.c文件)到可执行程序到底经历了哪几步,我想很多人都知道,但是每一步具体做了什么,估计很多像我一样的人就不能说的清清楚楚,明明白白了。C语言编译过程分成四个步骤:1,由.c文件到.i文件,这个过程叫预处理2,由.i文件到.s文件...转载 2019-06-20 14:52:48 · 2736 阅读 · 0 评论 -
size_t和int
(1)size_t和intsize_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关。在32位架构中被普遍定义为:typedef unsigned int size_t;而在64位架构中被定义为:typedef unsigned long size_t;size_t在32位...转载 2019-05-25 22:30:06 · 515 阅读 · 0 评论