标签C/C++下的文章

fz 发布于 04月18, 2019

C++中的Argument-dependent lookup

写代码的时候发现一个问题,有的STL函数在没引入std命名空间的时候,不加std::就能调用。例如:#include <algorithm>#include <iostream>#include <vector>int main() { std::vector<int> v; v.push_back(0); v.push_back(...

阅读全文 »

fz 发布于 09月17, 2018

C的数组类型的一些问题

我们知道,在C中,对指针类型取地址的话,取到的是这个指针变量的地址;而对数组类型取地址的话,无论多少次取地址,取到的值都是一样的,值都等于数组元素的首地址。这就引发了一个问题,我们看下面这个例子。typedef int arr[50];arr c;void f(arr *b){ cout<<*b<<endl;}int main(){ cout<<c&...

阅读全文 »

fz 发布于 03月17, 2018

C/C++编译时的ld和cpp

UPDATE: 该内容有点含混不清,请看最后。我一直对C/C++编译时的一些概念不太清楚,主要也是没有系统地去了解过,一直都是零散的接触。我在编译一些老旧程序时,经常会遇到调用ld和cpp这两个程序的,我一直搞不懂它们是干什么用的。经过学习,我大概知道它们是干什么的了。要注意的是,我们这里所说的cpp指的是The C Preprocessor,而不是C++。而ld指的是The GNU linker...

阅读全文 »

fz 发布于 02月25, 2018

C与C++中函数的互相调用

考虑两种情况:一是在C++中调用C的函数,二是在C中调用C++的函数。 首先要确定一个问题,在这里我们的C文件使用gcc编译,CPP文件使用g++编译。假设如果我们都采用g++编译的话,这意味着所有函数调用格式都是CPP的,也就不存在C和CPP的区别了。 对于这种调用问题,我们知道一般是使用extern关键字来解决,下面就来讲解它的具体用法。首先要说明一下是,extern关键字是用来声明而不是定义...

阅读全文 »

fz 发布于 01月10, 2018

extern char *s与extern char s[]的区别

首先,C在语言中,指针和数组是完全不同的两个东西。我们先把这两个概念的固有想法完全抛弃。考虑C中是不能将数组作为参数传递的,因此当我们使用到数组名,编译器会自动转化成数组中首元素的地址进行传递,也就是arr这个名字等价于&arr[0]。不过,数组名这个东西比较特殊,它也是可以取地址的。我们可以这样理解:数组名是“数组”这种变量的变量名,当直接用这个变量名的时候,我们拿到的是它的首地址,当对...

阅读全文 »

fz 发布于 04月10, 2014

一个反人类的代码

注意:这是一篇从旧博客恢复的文章。 原地址:http://freemeepo.com/blog/archives/103 有一本“反人类”的书,叫做《短码之美》(慎读!)。之前看到上面用字符串作为cmp函数传入sort函数的方法,感觉很神奇,但没理解。现在学过汇编之后再去看它,终于有点理解了。 先上一段C++代码: #include<iostream> #include<a...

阅读全文 »

fz 发布于 03月30, 2014

关于C++ STL中 max、greater函数的实现

注意:这是一篇从旧博客恢复的文章。 原地址:http://freemeepo.com/blog/archives/95 注:有更新 (只讨论在G++中的实现情况) 在G++中,max是用函数实现的。头文件中定义如下: template<typename _Tp> inline const _Tp& max(const _Tp& __a, con...

阅读全文 »

fz 发布于 06月20, 2013

C/C++到底支不支持定义不定长数组(VLA)

注意:这是一篇从旧博客恢复的文章。 原地址:http://freemeepo.com/acm/881.html 注:有更新 今天一同学写了个int n=5;int a[n];这样的代码,问我能不能过编译。我很果断地告诉他不能过。结果试了一下才发现,这竟然也能过编译!!!不科学!!! 我又试了试如下代码,也能正常运行。 #include<iostream> using namesp...

阅读全文 »

fz 发布于 06月07, 2013

如何在C/C++中方便地读写文件

注意:这是一篇从旧博客恢复的文章。 原地址:http://freemeepo.com/acm/786.html C语言中,有一系列读写文件的函数,是从控制台输入输出函数增加一个文件指针参数改过来的,例如scanf、printf、puts改成了fscanf、fprintf、fputs,但是这样未免太麻烦了。有没有方法可以做到:依然用那些控制台输入输出函数,达到读写文件的效果呢? 方法1: 使用...

阅读全文 »