![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c语言和c++杂谈
文章平均质量分 77
c语言和c++杂谈
cpp加油站
公众号:cpp加油站,专注分享linux下cpp知识
展开
-
【工欲善其事,必先利其器】之怎么查看c++代码生成的汇编代码
本篇文章讲解怎么得到c++代码对应的汇编代码,想要真正的理解一段代码到底是怎么执行的,还是要从汇编的层面去看,那怎么得到一段c++代码所对应的汇编代码呢,下面为你介绍三种方式。 1. gcc编译生成XXX.s文件 一般来讲,给你一个cpp文件,比如test.cpp,然后我们编译都是直接g++ test.cpp这样简单直接的方式,但其实它中间有很多个过程的,包含预处理、编译、链接等过程,而这其中的编译这个过程其实就是生成了汇编文件。 比如对于一个cpp文件,我们执行下列命令: g++ -E test.cpp原创 2021-07-01 09:32:38 · 345 阅读 · 14 评论 -
上次说了静态数组可变长,今天知道原理了
之前发了一篇文章,讲c99变长数组的,链接如下: 多年老c++程序员在静态数组这里翻船了 发出去以后有了挺多的反馈,因为这并不是一个很难的知识点,所以如果接触过的自然而然是知道,但还真有挺多人表示不知道和不相信这个事,同时我上次也只是简单的说了一下这个事,没有去讲解这个变长静态数组的实现原理,今天补上。 先看一下思维导图: 1. 变长数组是长度一直可以变的吗 变长数组,那么是长度一直可以变的吗,到底什么时候这个长度会确定下来呢? 我们先看一下代码,如下: #include <iostream>原创 2021-06-29 09:17:00 · 575 阅读 · 6 评论 -
多年老c++程序员在静态数组这里翻船了
事情的起因 事情是这样子滴,有一次我在代码评审的时候,发现有同事想使用运行时才能够获取到的值,去改变一个静态数组的元素个数,我当时就很诧异,因为我心里知道这样是不可行的,静态数组的元素个数在编译时就需要是固定不变的,一般只能是常量或者宏定义,否则编译就不能通过。 但是当时我提出来以后,把原因说了,包括写出这个代码的人和另外一位同事都没理解,弄得我有点怀疑自己了,难道是我搞错了? 我左思右想,最后我写了下面的代码来证实一下: #include <iostream> using namespace原创 2021-06-08 09:34:02 · 396 阅读 · 4 评论 -
题解5道c++面试题第一期(含解题思路、答案解析和实现代码)
本篇文章送上5道c/c++面试题目,并附上答案、解题思路以及扩展知识。 1. 求下面函数的返回值 #include <stdio.h> int func(int x) { int iCnt = 0; while(x) { iCnt++; x = x&(x-1); } return iCnt; } int main() { printf("cnt = %d\n", func(9999)); return 0; } 这题问的是函数的返回值,而通过代码我们能看到返回原创 2021-05-28 09:30:54 · 469 阅读 · 2 评论 -
手写strcpy和memcpy代码实现
本篇文章聊一下strcpy和memcpy的代码实现,这两个也是c和c++面试中常考的问题点。 1. 手写strcpy 首先看一下,一份标准的strcpy的实现如下: char *strcpy(char* strDest, const char* strSrc) { assert( (strDest != NULL) && (strSrc != NULL)); char *address = strDest; while((*strDest++ = *strSrc++) != '\0')原创 2021-05-26 09:28:53 · 436 阅读 · 0 评论 -
c语言中strstr函数的一个注意点
今天说一个之前工作上遇到过的一个问题,也是之前没注意过的一个点。 先看一段代码: #include <stdio.h> #include <string.h> int main() { char sz1[16] = {0}; char sz2[10] = {0}; char sz3[3] = {0}; strncpy(sz1, "bbAAcc", sizeof(sz1)-1); strcpy(sz3, "AA"); if ( strstr(sz1, sz2) != NU原创 2021-05-11 09:26:10 · 282 阅读 · 0 评论