【C++ 函数指针】教程文章相关的互联网学习教程文章

转载:C++中两个类中互相包含对方对象的指针问题【代码】【图】

原文链接:http://www.cnblogs.com/hanxi/archive/2012/07/25/2608068.html  前几天很不爽,因为C++中两个类中互相包含对方对象的指针编译时提示某一个类未定义。。。所以我就想啊想,这样也对,我的头文件都有#ifndef的,包含了一次就不能再包含了,以为就实现不了这样的功能,于是就改了设计方案:class A { public:A(B* pB):m_pB(pB){}private:B* m_pB; };class B { public:B() {} private:int m_i; };只在一个类中包含另一个...

【C++】利用指针实现通过函数改变多个参数的值【代码】

写惯了python,对于C++的语法越来越生疏,不同于python中函数可以return多个变量,C++的函数要想返回多个参数可以利用指针实现。因为在函数内部的变量都是局部变量,所以当参数传入函数中,不return不会改变函数之外的全局变量的值。但是如果传入指针参数或者地址参数,则可以实现对外部变量的改变。有以下2种做法:1、函数定义:void function(int &a){a = 500;//return; //void时可以省略return } 函数调用:int b = 10; func...

C++ void/指针与其他数据类型的相互转换【代码】

在写opencv多线程的时候用到了pthread_create()函数,int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);其中函数里最后一个变量声明为void* args。因为涉及到函数之间的传参,因此考虑将void*指针转换为string类型存放opencv图片存放路径,因为void*指针的特殊性,将void*作为中间指针变量,在string转换后的void*指针传入后,再将void* 转换为string类型,在调用的线程函数...

C/C++中利用空指针简化代码,提高效率

这里的写法,可以避免使用 for 循环,减少栈空间内存的使用和减少运行时的计算开销!#include <iostream> #include <string> using namespace std; void print_char(char* array[]);//函数原形声明 void main(void) { char* test[]={"abc","cde","fgh",NULL};//这里添加一个NULL,表示不指向任何地址,值为0 print_char(test); cin.get(); } void print_char(char* array[]) { ...

c++ 指向类成员函数的函数指针【代码】

// ConsoleApplication34.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <iostream> usingnamespace std;class Parent { public:Parent(){//cout << "我是爹" << endl; }virtualvoid print() {cout << "我是爹" << endl;} private:int a; }; class Child :public Parent { public:Child(){}void print() {cout << "我是儿子" << endl;} private:int b; };int main() {//返回值类型 (域作用符::*函数指针...

#C++初学记录(字符串与指针操作库函数)【代码】

测试程序#include<iostream> #include<cstring> using namespace std; int a[204],b[204],lena,n; char s1[100]="12345"; char s2[100]="abcdefg"; char s3[100]="ABCDE"; int main() {strncat (s1,s2,3);//s1="12345abc";strncpy(s1,s3,3);//s3的前三个字符拷贝到s1,s1="ABC45abc"; strncpy(s2,s3,6);//s2="ABCDE";strncmp(s1,s3,3);//比较s1和s3的前三个字符,比较结果相等则输出0,小于则输出负数,大于则输出正数; char *p=s...

【C++】智能指针【代码】

auto_ptr  auto_ptr是当前C++标准库中提供的一种智能指针。  auto_ptr在构造时获取某个对象的所有去(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性:int* p = newint(0); auto_ptr<int> ap(p);  从此我们不必关心应该何时释放p,也不必担心发生异常会有内存泄漏,这是因为auto_ptr的析构函数会执行指针的释放,而析构函数会在ap除了作用域以后执行。  auto_ptr的出现,主要是为了解决“被异常...

C++ 智能指针【代码】

智能指针概念C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念。这里不置贬褒,手动分配内存与手动释放内存有利也有弊,自动分配内存和自动释放内存亦如此,这是两种不同的设计哲学。有人认为,内存如此重要的东西怎么能放心交给用户去管理呢?而另外一些人则认为,内存如此重要的东西怎么能放心交给系统去管理呢?...

关于c/c++指针,指针的指针

伪军迷祝:建军节快乐! 当调用一个函数时,实际上入参使用的都是副本(除非是引用),指针也不例外。举个例子如:void func(int a, int * p);当调用func时无论是a还是p其实传入的都是副本,假设调用func时传给p的值是pt,则p这个pt的副本保存着和pt一样的地址,*p和*pt都是同一地址上的值,改变*p也就改变了*pt。但是,对p本身的操作是不会影响pt的,例如不能在函数func内部给p动态分配内存,或者使p指向别的地方,因为这只是对p这...

c++ 11学习笔记--智能指针【代码】

C++ 98的 std::auto_ptr已经被彻底遗弃了,取而代之的是unique_ptr、shared_ptr与weak_ptr。大部分时候我们自己手动申请内存方式内存都是没有问题的,问题是如果程序很大了之后,一个复杂的对象,多次拷贝的代价非常高,很多地方都会使用到,只存在一份拷贝显然是最好的,这个时候对象生命周期的管理就会很复杂,所以c++引入了智能指针。 任何事物都会有两面性。 Shared_ptr摘录于Effective C++, 3rd Edition, Item 17: 在 standal...

C/C++ 指针数组、二维数组

一、 二维数组1> 初始化int a[3][3] = { {1,0,0}, {0,1,0}, {0,0,1} }; // 这里是 {} , 而不是()2> 将二维数组当做一维数组处理void print_array( int * p, int row, int line){  for(int i=0; i<row; ++i)  {    for(int j=0; j<line; ++j)    {      printf("%d \n", *( p + i * row + j ) ); // 相当于 *( *(p+i) + j ); // p[i][j]    }  }}// 调用print_array( (int *)a, 3, 3 );3> 二维数组当二维数...

【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装

【送给在路上的程序员】对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现。对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步。对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现。每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我。数组与指针#include<stdio.h> #include<stdlib.h>void main1()...

c++指针笔记一

左值和右值的区别:左值就是在赋值中可以放在赋值操作符两边的值,比如: int a = 1; double b = 2.0 a = b; b = a; 这里a和b都是左值,一切变量都是左值,但const量是例外。 而右值则是只可以放在赋值操作符右边的值,比如: int a = 0; char *b = "hello"; 3 = a; // ERROR "howdy" = b // ERROR 这里3和"howdy"都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值。指针变量的声明与初始化1.指针包含的是包含...

【C++】智能指针(Smart Pointer)【代码】【图】

1. 传统指针存在的问题传统指针存在诸多的问题,比如指针所指向的对象的生命周期问题,挂起引用(dangling references),以及内存泄露(memory leaks). 如下是一个传统指针的使用过程void Foo() {int *iPtr = new int[5];// manipulate the memory block// ...// ...// ...delete[] iPtr; }以上代码将正常运行且内存将被合理释放,但是使用指针常会发生一些意想不到的事情,比如访问一个非法的内存单元,除0操作,以及根据一些判断条...

C++ 引用和指针【代码】

参数传递的本质是什么?参数的传递本质上是一次赋值的过程,赋值 <---> 对内存进行拷贝 <---> 将一块内存上的数据复制到另一块内存上C++禁止在函数调用时直接传递数组的内容,而是强制传递数组指针,而对于结构体和对象没有这种限制。引用是什么?引用可以看作是数据的一个别名,同个这个别名和原来的名字都能找到这份数据。引用必须在定义的同时初始化,并且以后也要从一而终,不能再引用其他数据,这有点类似于const变量(常量)...