【探讨c/c++的指针】教程文章相关的互联网学习教程文章

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变量(常量)...

C++二级指针第一种内存模型(指针数组)【代码】

二级指针第一种内存模型(指针数组)指针的输入特性:在主调函数里面分配内存,在被调用函数里面使用指针的输出特性:在被调用函数里面分配内存,主要是把运算结果甩出来 指针数组  在C语言和C++语言中,数组元素全为指针的数组称为指针数组。一维指针数组的定义形式为:“类型名 *数组标识符[数组长度]”。  例如,一个一维指针数组的定义:int *ptr_array[10]。 如何理解指针数组   指针数组是数组元素为指针的数组,其...

C++ 必知必会:条款16 指向成员函数的指针并非指针【代码】

这一点与指向成员的指针类似,其实现可能更加复杂,因为成员函数同时还存在虚拟函数,需要动态绑定执行动作。当然这种属性是属于函数本身的,此处表达的是指针不涉及函数的属性问题。 1: class shape 2: { 3: public: 4: // void moveTo(point newLocation); 5: bool validate(); 6: //… 7: } 8: 9: class circle:: public shape 10: { 11: public: 12: //… 13: bool draw() const; 14: ...

C++中智能指针的设计和使用【代码】

大多数C++类用三种方法之一管理指针成员(1)不管指针成员。复制时只复制指针,不复制指针指向的对象。当其中一个指针把其指向的对象的空间释放后,其它指针都成了悬浮指针。这是一种极端(2)当复制的时候,即复制指针,也复制指针指向的对象。这样可能造成空间的浪费。因为指针指向的对象的复制不一定是必要的。(3) 第三种就是一种折中的方式。利用一个辅助类来管理指针的复制。原来的类中有一个指针指向辅助类,辅助类的数据成...

c++ shared_ptr储存this指针多次析构问题之enable_shared_from_this解决方案【代码】

#include <iostream> #include <memory> #include <cassert> /*//this //调用了两次析构函数,ParentPtr p(this);//智能指针出了作用域后就delete this ,析构了//所以错了,为了解决这个问题,就需要自身的类继承于 std::enable_shared_from_this<Type>//将ParentPtr p(this) 换成, shared_from_this();*/ class Parent; typedef std::shared_ptr<Parent> ParentPtr; typedef std::weak_ptr<Parent> WeakParentPtr;class Child : pub...

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器 std::ref(变量)#include<iostream>template<class T> void com(T arg)//模板函数,引用无效,引用包装器 {std::cout <<"com ="<< &arg << "\n";arg++; }void main() {int count = 10;int & rcount = count;com(count);std::cout << count << std::endl;//std::ref(变量) ,函数模板,引用包装器//com(std::ref(count));com(rcount);std::cout << "main=" << &rcount << "\n";std::cout << count << std::endl;std::cin...

小猪猪逆袭成博士之C++基础篇(四)数组、指针、vector、迭代器【图】

小猪猪逆袭成博士之C++基础篇(四)关键词:数组,Vector。 一、数组与指针数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据。例如:int a[10],意思就是从a开始有10个连续的int大小的空间。我们还是从初始化说起。我们以数据类型int为例,当然也可由有很多的数据类型,可以是像int,double这种,也可以是自定义的类,一般的初始化方法有:int a[10];int a[10]={0};int a[3]={0,1,2};在前面的文章...

c++ 智能指针及 循环引用问题

c++智能指针介绍由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete,比如流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见,并造成内存泄露。如此c++引入智能指针 ,智能指针即是C++ RAII的一种应用,可用于动态资源管理,资源即对象的管理策略。智能指针在 <memory> 标头文件的 std 命名空间中定义。 它们对 RAII 或获取资源即初始化编程惯用法至关重要。RAI...

C++ 自动指针 共享指针【代码】

#include <iostream> #include <string> #include <memory> class Item { public:Item(std::string str):name(str){}~Item(){std::cout<< name << " unitialize!" <<std::endl;}void dump(){std::cout<< "I‘am " << name <<std::endl;}static Item *CreateItem(std::string str){Item *pItem = new Item(str);return pItem;} private:std::string name; };int main() {Item *pi = Item::CreateItem("common ptr");pi->dump();dele...

C++ 之 指针详解篇(一)【代码】

C++的指针太重要了,我们有必要去掌握它。所以必须认真的对待指针。先来讲解什么是指针。(重点掌握)  指针是存储内存地址的变量,内存又是什么?内存是干啥用的?简单的说,就是存储一些二进制数据,它是按一定的顺序存储的线性单元结构。那一个数据又是如何存储在内存的呢?这些问题都是汇编的基础知识,如果你学过汇编理解这真的不是难事。闲话越扯越远了,通常数据的存储在内存地址中,不同的计算机它的地址也会不同。假设我们...

C++学习杂谈1(extern、cosnt引用&指针)

extern的用法:.cpp 1#include <iostream>using namespace std;extern int i;int main(int argc, char** argv) { cout << i << endl; return 0;}.cpp 2#include <iostream>int i = 100;注意:在测试的时候.cpp 2没有加头文件#include<iostream> 导致编译报错。另外的:const限定符除了将其修饰的对象变为常量对象外,还有其他的特点:1,因为const对象一旦创建后其值就不能改变,所以const对象必须初始化。2,默认状态下,const对象...