
C/C++
问曲
这个作者很懒,什么都没留下…
展开
-
typedef定义指针函数和直接用指针函数区别
用了那么久的C#,回头再看C语言时,好多东西希望还是想学的细一点。今天看到typedef定义指针函数时,感觉和直接用指针函数很相似,然后就写了个例子验证了一下。下面的是例子直接用指针函数,如果需要指向不同的函数时需要来回的赋值,而使用typedef时只是相当于定义了一个该类型的函数,赋值一次,之后就可以重复使用了。当指针函数作为函数参数时也可以简化一些代码。#include <iostream>//using namespace std;////int max(int a原创 2021-10-08 14:59:20 · 287 阅读 · 0 评论 -
const,也是有冒牌货的?
我们经常说,被const修饰的变量表示不能被修改,但是C语言的在实际操作中,并非完全如此。可以通过下面的程序看出,在c语言中,const修饰的变量可以通过指针修改。这是因为,所有的变量都存在于普通内存之中,内存中存在一个地址,在c语言中,指针可以指向地址,进而通过指针修改变量的值。但是这也仅仅是限制在C语言中。在C++中,被const修饰的变量是不可以被修改的,原因我说不太清,有人曾解释说是因原创 2017-08-02 09:55:21 · 231 阅读 · 0 评论 -
指针数组和数组指针
int *a[10],指针数组。int (*a)[10],数组指针。但从名字上看,指针数组,顾名思义,是一个数组,里面存放若干个指针。数组指针,重点是指针,也就是他是个指针,指向了一个数组。//指针数组typedef int (*myint1)[3];int array1[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };int array[3] = {原创 2017-08-02 09:55:17 · 199 阅读 · 0 评论 -
数组和指针关系的推演
观点是:数组在使用过程中,会退化为指针。一维数组,如果仅打印数组名,我们得到的是其首元素地址,二维数组也是如此。直接推演二维数组。二维数组名就相当于二维指针。typedef int (*myint)[3];int array[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };myint p = array;cout << p <<endlcout <<原创 2017-08-02 09:55:14 · 207 阅读 · 0 评论 -
指针和数组
简单说下指针和数组的使用,下篇再说推演过程先说一维数组。int a[3] = { 4, 2, 3 };int *myp= a;cout << *myp <<endl;//数组首元素cout << *(myp + 1) <<endl;//数组第二个元素cout << myp[0] <<endl;//数组首元素cout//数组第二个元素说明:1.一维数组中,int *myp=原创 2017-08-02 09:55:11 · 182 阅读 · 0 评论 -
指针常量和常量指针
const char *p;//定义一个指向常量的指针。意味着指向的内容不可以通过指针修改,指针只有读的功能不能写。char *const p;//定义一个指针常量,一旦初始化之后其内容不可改变。指针常量意味着该指针指向的地址不能变。但是指针地址内的数值可以修改仅仅通过描述可能不好记住,但是,实际上也不需要记住到底是指针常量还是常量指针,只需要看const修饰的是谁便可以。const cha原创 2017-08-02 09:55:08 · 216 阅读 · 0 评论 -
strtok函数字符串分割
strtok函数用指定字符分割字符串。并返回剩余字符的指针。需要注意的是:第一:strtok的第二个参数是字符串,但是分割形式为字符,如下面的例子所示。我们的目的也许是想用@ol去分割,而实际的结果是,@ o l三个字符,遇到任何一个都会将字符串进行分割。第二:在while循环中,第一个参数要写成NULL.char s[] = "hell@oworld@ppp";char原创 2017-08-02 09:55:05 · 311 阅读 · 0 评论 -
strchr和strstr的用法
strchr和strstr的用法是在字符串中查找指定字符字符串的函数,返回值为第一次查找到该字符的位置指针。这么说可能不知道返回值运行出来是啥结果,运行一下看看就知道,其实就是查找到该字符以后的所有剩余的字符。为了简化起见,代码并不是很规范,只是为了演示效果。#define _CRT_SECURE_NO_WARNINGS#include#include#includeusing原创 2017-08-02 09:55:03 · 1304 阅读 · 0 评论 -
运算符重载案例
不知道怎么说,直接上代码,边看边说/可以先从主函数看起。运算符重载主要就是3点,一个当然是运算符重载的编写,另一个就是类的构造函数,还有就是this指针。注意这亮点就行了。还有就是,进来把重载写成面向对象的形式,不要披着面向对象的皮写着面向过程的类成员函数。这段函数可以直接复制就跑的起来,在这里看不清楚的可以复制到编译器里看。需要注意的就是复制到cpp文件里,别复制到.c文件。#includ原创 2017-08-02 09:55:00 · 300 阅读 · 0 评论 -
三言两语说继承
C++的继承,说的简单点就是子承父业,继续拓展。但,如果仅仅是子承父业,外加拓展,似乎还不足称之为C++的一个特性。个人见解,有些人喜欢搭框架,有些人喜欢做算法,有些人喜欢敲实现。而继承就很好的实现了这点。继承的目的就在于分类管理。而分类管理的实现是通过虚函数和多态。简单说下怎么继承。父类公有,就好比房产,儿子还可以住,外人也可以来小住两日。父类的保护,就好像密码,儿子可以用,但是外人原创 2017-08-02 09:54:57 · 198 阅读 · 0 评论 -
三言两语说C++三性
我们经常提及C++的三性,封装继承和多态。我在这里就用最简洁的语言说说自己的看法。这三个性质,看似独立,其实是递进的关系。就好比,封装是部件,继承是组装机器,而多态则是选择调用哪台机器。这个比喻也许不那么合适,但是基本也能表达其含义。封装,简而言之,就是只给你看到我想给你看的。继承,子承父业。父亲公有的,被保护的都是儿子的。多态,则是,附近提供方法的思路,而儿子根据自身情况去具体实现原创 2017-08-02 09:54:54 · 246 阅读 · 0 评论 -
三言两语说new和malloc:new m…
new和delete是c++的内存开辟和施放方式,malloc和free是C语言的。他们之间是否能够通用?答案是:基本可以。在空间不复杂时,普通的开辟空间是可以通用的。且用new的空间,可以用free释放,用malloc的空间,也可以用delete释放。但是,但是,new和delete在开辟类空间时,是自动调用构造函数和析构函数的。而malloc和free是没有的。注:malloc前一原创 2017-08-02 09:54:51 · 270 阅读 · 0 评论 -
三言两语说拷贝:深拷贝和浅拷贝
所谓深拷贝和浅拷贝,主要是指在有指针存在的情况下,指针显式分配内存,而在拷贝过程中,出现了地址拷贝,而内存没有新开辟的问题。浅拷贝就是拷贝指针所指向的内存地址,但是没有给新的指针分配相应的内存空间。深拷贝一般需要手动完成,新地址显式的分配新空间。原创 2017-08-02 09:54:48 · 210 阅读 · 0 评论 -
新手入门,三言两语说编译:C和C++…
说到C和C++,对于新人来说,总感觉似乎是一种东西,而今,在Visualstdio 比较常用,新手似乎根本就没区分C和C++的语法。也不知道C++和C语言的编译器如何区分。我就用最简短的话区分一下。C的源文件是.c,C++的是.cpp。C++编译器兼容了C的语法。但是编译过程中,如果源文件是.c那么就是C编译器的规则去检查语法。比如说:c语言中要求定义都写在前面,定义之前不能有函数调用原创 2017-08-02 09:54:45 · 218 阅读 · 0 评论