C/C++
文章平均质量分 76
Tw!light
这个作者很懒,什么都没留下…
展开
-
空指针和野指针
空指针常量0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 等都是空指针常量。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一般的 C 系统选择 (void*)0 或者 0 的居多(也有个别的选择 0L);至于 C++ 系统,由于存在严格的类型转化的要求,void* 不能象 C 中那样自由转换为其它...原创 2018-05-02 15:54:35 · 2331 阅读 · 0 评论 -
C++ string 是否以‘\0’结尾 讨论
之前在某篇文章中看到,C语言字符串是以'\0'结尾的,但是C++string类型的字符串并不是以'\0'结尾。话不多说,直接放代码(Cygwin64环境g++编译器):string b("abc");cout << b.capacity() << endl;cout << b.size() << endl;if(b[3] == '\0'...原创 2018-05-19 15:50:35 · 28677 阅读 · 5 评论 -
C++ 友元函数
首先,简单记忆法:A是B的友元函数(或类),即A是B的朋友,A可以访问B的所有属性和方法。1、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数(友元函数不是类的成员函数,是普通函数) 优点:能够提高效率,表达简单、清晰缺点:友元函数破环了封装机制,尽量...原创 2018-05-13 16:55:01 · 468 阅读 · 0 评论 -
C++ 类的访问权限public、protected、private
(1)不继承方面来说,private,public,protected属性和方法的访问范围.private:只能由1.该类中的函数、2.其友元函数访问。(属性和方法派生类都不可以访问,不管是什么继承)不能被任何其他访问,该类的对象也不能访问。protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。但不能被该类的对象访问。public:...原创 2018-05-13 14:37:20 · 6124 阅读 · 1 评论 -
tuple用法
了解tuple:- tuple是模板,tuple所有成员都是public的- 使用tuple的相关操作,需要包含头文件tuple。- 希望将数据组合成单一对象时,使用tuple非常有用。(快而随意的数据结构)- 一个tuple可以有任意数量的成员,tuple的成员类型也不相同。- 一个确定的tuple类型的成员数目是固定的,意味着不能有添加和删除能够改变成员数目的操作。定义...转载 2018-04-15 16:45:20 · 1694 阅读 · 0 评论 -
C/C++ 函数返回值
函数返回局部变量的原理:一般说来,函数中是可以进行局部变量的返回的,不然岂不是全部要用全局变量,如果使用了全局变量,那还有必要进行返回吗?那函数就没有它存在的意义了!但是要注意了,这里所谓的局部变量的返回很有内涵,什么样的值才可以进行返回而不出错?其实,只要遵守一句话即可:函数不能返回指向栈内存的指针!为什么?因为返回的都是值拷贝!我们先看一个最普通的例子1:#include...原创 2018-04-28 16:35:06 · 2216 阅读 · 0 评论 -
c++ auto关键字使用
C++11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,类似的关键字还有decltype。举个例子: int a = 10; auto au_a = a;//自动类型推断,au_a为int类型 cout << typeid(au_a).name() << endl;typeid运算符可以输出变量的类型。程序的运...原创 2018-04-15 15:08:10 · 54229 阅读 · 17 评论 -
C++ 函数默认参数
首先注意,C语言函数没有默认参数的说法。但是c++可以。1.有函数声明时,默认参数可以放在函数声明或定义中,但只能放在二者之一。例如:void fun(int n=1); 函数声明或者void fun(int n=1) 函数定义{...}没有函数声明时,默认参数在函数定义时指出。2.在具有多个参数的函数中指定默认值时,默认参数都必须出现在不默认参数的右边,一旦某个...原创 2018-04-15 13:51:41 · 479 阅读 · 0 评论 -
C++ Vector 最大 最小值 索引 位置
C++ Vector 最大 最小值 索引 位置使用STL的Vector时,利用函数 max_element,min_element,distance可以获取Vector中最大、最小值的值和位置索引:#include <vector> #include <algorithm> #include <iostream> int main()...转载 2018-04-09 09:34:56 · 3291 阅读 · 0 评论 -
二维数组传参问题
二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型。正确的是:void Func(int array[3][10]);void Func(int array[][10]);可以省略第一维的大小错误的是void Func(int array[][...原创 2018-03-17 19:37:01 · 1482 阅读 · 0 评论 -
一维数组传参问题
一维数组传参问题能否向函数传递一个数组?看例子:void fun(char a[10]){char c = a[3];}int main(){char b[10] = "abcdefg";fun(b[10]);return 0;}编译会出现警告,但是不会报错,但是运行出错。分析:第一:b[10]并不存在,在编译的时候由于没有去实际地址取值...原创 2018-03-17 16:55:48 · 2844 阅读 · 4 评论 -
数组指针和指针数组
数组指针和指针数组变量类型判断:变量和哪个关键字先结合,该变量就是什么类型。例如(1)int (*p)[n]; //p先和*结合,故是一个数组指针 ,即指针指向一个数组(2)int *p[n]; //p先和[n]结合,故是一个指针数组,即数组里面的成员是指针数组指针和指针数组区别:数组指针(也称行指针)定义 int (*p)[n];()优先级高,...原创 2018-03-19 14:40:26 · 322 阅读 · 0 评论 -
C/C++ const关键字用法
C和C++中const关键字用法还是有点区别的。一、不同点C语言中:const int a = 3;int * pa = &a;*pa = 4;结果: a = 4 从这里可以看出a的值被修改了,在C语言中用const去修饰整形变量a,即a的值是不可变的,不能显式地通过赋值语句去改变a的值,但是不代表在程序中不能通过其它方法来修改这个值。总结:在C...原创 2018-05-05 16:26:06 · 236 阅读 · 0 评论 -
C/C++知识点自我总结(持续更新)
1、C++语言结构体语法的C大同小异 ①C++声明结构体变量时可以省略struct ,C中不可以省略 ②C++空结构体占一个字节,C中占0字字节2、c/c++内置类型变量在任何函数外如不初始化,系统都会初始化为0;在函数体内如不初始化则可能发生错误(除了用作左操作数)...原创 2018-05-12 14:50:39 · 169 阅读 · 0 评论 -
C语言 类型的字符串怎么判断为空
这篇文章涉及到空指针常量,结合空指针和野指针一起看。最近在XCode下编程,遇到一个问题。平时我们判断C语言类型的字符串是否为空,如下char *p;...if(p == "") ...但是会提示警告:Result of comparison against a string literal is unspecified (use strncmp instead)。当时我...原创 2018-05-26 23:49:09 · 17373 阅读 · 0 评论 -
计算代码执行时间
头文件<time.h>clock_t start,finish;double total_time;start = clock();.... // 要计算的代码finish = clock();total_time = (double)(finish-start)/CLOCKS_PER_SEC;原创 2018-05-19 15:58:15 · 320 阅读 · 0 评论 -
C语言中函数返回字符串的四种方法
在讨论着四种方法之前,首先要对函数有一个简单的认识,无论是在形实结合时,还是在return语句返回时,都有一个拷贝的过程。你传进来的参数是个值,自然函数在工作之前要把这个值拷贝一份供自己使用,你传进来的是个地址,函数也就会拷贝该地址供自己使用。同样return返回时,如果返回一个值,函数会将该值拷贝一份以提供给主调函数使用,返回的是一个指针(也就是地址),自然拷贝的就是一个地址,供主调函数使用。...原创 2018-03-28 16:20:54 · 732 阅读 · 0 评论 -
C语言指针问题
前几日在论坛上看到一个C语言指针的问题,引发的思考和深入先看下面例子: int *p; *p = 7; //段错误如上例子,若定义指针,只是定义指针的本身,却没有定义指针所指的地址(或者定义指针 = NULL,NULL是宏定义来的,其值为无类型的0,即#define NULL (void*)0),所以赋值其指向地址的值,必定会因为没有指向地址发生内存错误导致程序崩溃。其正确操...原创 2018-03-26 18:15:05 · 296 阅读 · 0 评论 -
关于指针地址问题
直接上代码:#include <stdio.h>int main(){ char a[] = "hello"; char *pa = a; printf("a = %p\n",a); //数组首元素的地址 等效于 &a[0] printf("&a = %p\n",&a); //整个数组a的首地址 ...原创 2018-03-24 18:16:04 · 143 阅读 · 0 评论 -
数组首地址arry和&arry的区别
今天在梳理指针地址的问题中,突然发现数组首地址都能用arry和&arry来表示。所以网上查找了一下这两个区别,总结如下。1. 区别int arry[5] = {0};arry 数组首元素的地址 (等同&arry[0])&arry 整个数组的首地址2. 相同点arry 和 &arry 打印出的值都是相同的3. 代码#in...原创 2018-03-24 18:02:48 · 757 阅读 · 0 评论 -
C++ vector深究
一 size和capacity区别size的大小是指的容器所含的元素个数。STL容器都含有该方法,取得容器的元素个数。capacity的大小是指容器所分配的内存大小。vector特有的方法。(因为别的容器大小和容量相等,所以没必要提供capacity)关系:capacity >= size二 resize和reserve(1)resize 重新分配元素多少 -->...原创 2018-04-03 11:56:37 · 283 阅读 · 0 评论