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

C++指针也只能传值?指针传值与传址的实例解析【代码】【图】

??指针也存在“传值”和“传址”的操作。下面用一小段测试代码及结果来进行说明: bool GetValue(int* var) {int b = 10;var = &b;return true; }int main() {int* a = nullptr;GetValue(a);return 0; }??以上是测试代码,下面是运行结果: ??在还没运行GetValue(a);函数的时候,可以看出,a是nullptr类型。 ??运行进去之后,可以看到GetValue()函数的形参var有地址,且值为10。 ??但是,运行出来之后,可以看到,a的值与运行Ge...

c++智能指针介绍之auto_ptr【代码】

c++智能指针介绍之auto_ptrc++98: auto_ptr, 包含头文件为<memory>里, c++11 弃用,unique_ptr代之auto_ptr 作用及特性:智能指针的引用,主要是为了解决异常发生时产生内存泄漏。 auto_ptr在创建的时候获取对象的所有权,在析构的时候,释放对象内存空间(RAII1)。 重载了函数的 *和->运算符,使得其操作看起来像个内置指针。 没有使用引用计数,在复制构造或赋值的时候发生所有权转移包含的操作:拷贝构造、赋值操作:auto_p...

C++之指针与数组区别【代码】

C++/C程序中,数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。下面以字符串为例比较指针与数组的特性。 一、修改内容1 char a[] = “hello”; //“hello”位于常量存储区,a在全局(静态)...

C++的指针常量和常量指针

这2个概念非常容易混淆,即使是老鸟,也有眩晕的时候,写此博文,加深记忆... 指针常量:一个指针,并且它是一个常量,它的值不许被改变; char *const p1 = "Hello!"; //必须在定义的时候初始化,因为它是常量 p1 = "NiHao!"; //错误,不允许对常量赋值 常量指针:一个指针,并且它指向对象是一个常量(不许改变),但该指针本身的值可以被改变; const char *p2 = "Hello!"; //可以不初始化 p2 = "NiHao!"; //正确

图解c/c++多级指针与多维数组【代码】【图】

声明:本文转自 chenyang_yao ,欢迎阅读原文。 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的。其中,多级指针与“多维”数组更是让很多人云里雾里,其实,只要掌握一定的方法,理解多级指针和“多维”数组完全可以像理解一级指针和一维数组那样简单。 首先,先声明一些常识,如果你对这些常识还不理解,请先去弥补一下基础知识:1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。...

c++ day16 c面向接口编程和c多态&函数指针类型做参数

函数指针基本语法知识梳理 1.如何定义一个函数类型 2.如何定义一个函数指针类型 3.如何定义一个 函数指针指向一个函数的入口地址#include <iostream> using namespace std; //数组类型的基本语法 //定义一个数组类型 //int a[10]; //定义一个指针数组类型//定义一个指向数组类型的指针 数组指针void main01(){int a[10];//a代表的数组首元素的地址 &a代表整个数组的地址//a+1 4和&a+1 40步长不一样//定义一个数组类型{typedef in...

【C++ 回顾】 C++ 中指针和引用的区别?

1.指针有自己的一块空间,而引用只是一个别名; 2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小; 3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用; 4.作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引 用的修改都会改变引用所指向的对象; 5.可以有const指针,但是没有const引用; 6.指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变; 7....

【leetcode 双指针 C++】11. Container With Most Water【代码】【图】

11. Container With Most Waterclass Solution { public:int maxArea(vector<int>& height) {int ans = 0;int left = 0, right = height.size() - 1;while(left < right) {ans = max(ans, min(height[left], height[right]) * (right - left));if(height[left] > height[right]) right--;else left++;}return ans;} };

Leetcode 117. 填充每个节点的下一个右侧节点指针 II 解题思路及C++实现

方法一:层序遍历 解题思路: 和第116题一模一样,其实,用队列queue更简单一些,不用将顺序倒来倒去。通过使用队列的长度信息queue.size(),可以只需要一个队列就能做到层序遍历。/* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node* next;Node() {}Node(int _val, Node* _left, Node* _right, Node* _next) {val = _val;left = _left;right = _right;next = _next;} }; */ class Solution {...

C++引用和指针比较 指针常量和常量指针

1.定义一个指针的时候可以不赋初始值,定义一个引用的时候必须有初始值。?int?*x;//不报错 ?int?&y;//报错 ? 2.对于程序员来说指针变量包含两部分一个是指针指向的地址和指针本身自己的地址,所以可以对指针再进行取地址&。 对程序员来说引用变量只能获取它所指向的变量的地址,而无法获取引用变量本身的地址,它本身的地址由编译器进行支配。int a = 5; int *x = &a; int &y =a;std::cout<<x<<std::endl;//x指针指向的地址 std::c...

c++学习之初话 函数指针和函数对象 的因缘【代码】【图】

函数指针可以方便我们调用函数,但采用函数对象,更能体现c++面向对象的程序特性。 函数对象的本质:()运算符的重载。我们通过一段代码来感受函数指针和函数对象的使用: 1 int AddFunc(int a, int b) 2 { 3 return a + b; 4 } 5 6 class Add7 {8 public:9 const int operator()(const int a,const int b) 10 { 11 return a+b; 12 } 13 }; 14 15 int main() 16 { 17 //函数指针 18 int (*A...

c++笔记 指针常量,常量指针,常指针常量区别【代码】【图】

本文是根据崔毅东,杨谈老师c++程序设计(面向对象进阶)课程3.05记录的读书笔记指针两个属性 指针本身具有两个属性,即指针变量本身和指针变量所指向数据。 指针和被指数据都可以有变量或者常量两种状态指针常量 常量指针 常指针常量的定义常指针常量即为常量指针常量,顾名思义具有常量指针和指针常量二者的特性 示例:上左:普通指针 上右:常量指针 下左:指针常量 下右:常指针常量 #include<iostream>using std::cout; using...

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++ 中引用与指针的区别实例详解

C++ 中引用与指针的区别实例详解 引用是从C++才引入的,在C中不存在。为了搞清楚引用的概念,得先搞明白变量的定义及引用与变量的区别,变量的要素一共有两个:名称与空间。 引用不是变量,它仅仅是变量的别名,没有自己独立的空间,它只符合变量的“名称”这个要素,而“空间”这个要素并不满足。换句话说,引用需要与它所引用的变量共享同一个内存空间,对引用所做的改变实际上是对所引用的变量做出修改。并且引用在定义的...

c++ (函数指针适配器)【代码】

函数指针适配器取反适配器void printFunTwo(int val,int start) {cout << val << endl;cout << start << endl; } //函数指针适配器 void test03() {vector<int> v;for (int i = 0; i < 10; i++)v.push_back(i);//将函数指针 适配为 函数对象//ptr_funfor_each(v.begin(), v.end(), bind2nd(ptr_fun(printFunTwo),100)); }