首地址:一段连续的存储地址中,第一个单元的地址是首地址。指针类型的加减,是以指针所指向的类型为单位,进行偏移。 一维数组与指针:定义一个一维数组,数组名是整个数组首地址。int a[5];其中a和&a[0]是相同的,都是整个数组的首地址,类型是int*但是&a的类型是int(*)[5],,指向数组的整个地址。如何利用指针访问数组的值?定义一个数组 int a={1,2,3,4,5};定义一个指针 int *p =a;//a代表了这个数组的首地址,p指向a[0]那么*p...
转自:http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。1.指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;上面...
C++ 中指针和引用的区别(摘自网络)引用和指针★ 相同点:1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。★ 区别:1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终” ^_^4. 引用没有 const,指针有 const,const 的指针不可变;5. 引用不能为空,指针可以为空;6. “sizeof...
刚开始接触C++时,指针和const之间的关系有点混乱,现在总结如下:一、指向const变量的指针#include<iostream.h>
void main()
{constint *p=NULL;constint a=10;p=&a;cout<<"*p="<<*p<<endl;int b=100;p=&b;cout<<"*p="<<*p<<endl;//*p=200; 错误,不能通过修改指针来修改指针指向的内容b=200;cout<<"*p="<<*p<<endl;
}不能通过修改指针来修改指针指向的内容,但可以修改指针的指向。另一种形式:int const *p=NULL;二、const指...
1.我们知道C++的类成员函数中,默认都隐含了一个this指针,标识调用该成员函数的对象2.为什么需要有一个this指针呢?C++设计这个机制的初衷是什么呢?我们知道,普通的C++类,其成员函数是类的所有对象共享的,而数据时每个对象所独有的.即:数据独有,方法共享因此在调用类的某个成员方法(非静态方法)时,我怎么知道是哪个对象调用的呢?此时就是通过this指针来区分的,通过this指针我可以区分是该类的哪个对象正在调用该成员方法.注意事项:a....
#include<stdio.h>
main()
{char *pstr = "abcdef";//pstr是指向常量区字符数组的一个指针 printf("%c\n", *pstr);printf("%s\n", pstr);char str = ‘A‘;char *ppstr = &str;//取str变量的地址 printf("%c\n", *ppstr);return0;
}原文:https://www.cnblogs.com/xkdn/p/14491728.html
C++常用的函数指针语法:返回值类型 (*函数名)(参数列表);举例说明:int (*Func)(int m, int n);用typedef简化函数指针的定义 例如:1 typedef int (*Func)(int m, int n);函数指针的初始化和赋值 1// 1. 先声明对应函数指针类型的函数 2int max(int num1, int num2)3{4return num1 > num2 ? num1 : num2;5}6 7//2. 初始化 8 Func fc = 0;//表示函数指针不指向任何函数 9 Func fp = max;//表示函数指针指向max函数
1011//...
1、指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存...
1、函数指针,用于保存函数的入口地址,即函数名。// 函数指针的基本用法// 声明一个函数
int func(int);// 写法1
// 定义一个函数指针
int (*fptr)(int); // 形式上只比函数多了一个*号和一对圆括号// 写法2
// 声明一个函数指针类型
typedef int (*fptr_t)(int);
// 定义一个函数指针
fptr_t fptr;// 函数指针赋值
fptr = func;// 利用函数指针来调用函数
fptr(1); // 写法1
(*fptr)(2); // 写法22、函数指针也是一种变量,会有变...
本文内容出自《高质量C、C++编程指南》。阅读之后理解,然后通过自己的话和例子讲清楚,这样才是学习之道。以下内容都是自己所认为的东西,如果哪里错了,希望各位大神指出。1、数组作为函数的参数进行传递时,该数组自动退化为同类型的指针结果:第一张图中,str为数组,此时的长度为6,而作为函数参数时退化为指针了,指针的长度固定为4。第一张图中,str为数组,所以不能对str进行自增或自减,而在函数中是可以的,因为退化为指...
我们知道c++标准库中定义了智能指针auto_ptr,但是我们很少用它,因为虽然它能够自动回收动态开辟的内存,不需要程序员自己去维护动态开辟的内存,但是当用它去赋值或者是拷贝构造时有一个管理权转移的过程,这样我们就不能很方便的使用auto_ptr。下面是简单的auto_ptr的实现,我们可以看到在复制和赋值时它将转移管理权。template<class T>class AutoPtr{public: AutoPtr(T* ptr) :_ptr(ptr) {} ~AutoPtr() ...
(转http://www.nowamagic.net/librarys/veda/detail/2128)int i;
int *pi;
i = 30;
pi = &i;
printf("%d\n", i);
printf("%d\n", *pi);
printf("%d\n", &i);#include "stdio.h"main()
{char a,*pa;a = 10;pa = &a;*pa = 20;printf("%d", a);
}输出:20通过指针访问数组元素int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6};
pa = a; /*请注意数组名a直接赋值给指针pa*(a的首地址赋给pa)/for (i = 0; i <= 9; i++)
{printf("%d\n", pa[...
更新:勘误,delete [] 猪
我们知道,C语言以及早期的面向结构的语言几乎都支持数组定义,比如整形数组int 女神[2],表示有俩数: 女神[0], 女神[1],她们都是整数。C++ 语言为了效率和兼容考虑,也支持这个。当然了,毕竟是别人家的孩子(标准),并不提供类似于 vector 和迭代器类型那些神奇的能力。与 vector的区别在于,数组的长度是固定的。另外呢,指 针还是那个指针,没有变化。?
我们编程时候,尽量使用 vector,避免使用数...
?123456789#include <iostream>usingnamespacestd;intmain(){ char*p=NULL; p="computer"; cout<<p; return0;}输出
computer而不是字符串的地址,如果要输出地址可以 用 printf("%p",p);或 cout << static_cast<const void *>(p)原文:http://www.cnblogs.com/newhcw/p/3527575.html
2 指针2.1 尽量使用智能指针
等级:【推荐】
说明:正确使用智能指针可以省去指针管理的工作。2.2 类成员变量指针释放后一定要置空
等级:【必须】
说明:如果类成员变量指针在释放后没有置空,将出现如下问题:
a)无法判断指针是否已经是野指针
b)Dump分析很难发现是野指针函数调用导致崩溃2.3 正确使用delete和delete[]
等级:【必须】
说明:delete[]用于释放动态分配的数组,而delete用于释放对象。两者不可以混用。2.4 使用指...