c++中与指针相关一些基本知识
来源:互联网 发布:淘宝上货最少几件 编辑:程序博客网 时间:2024/06/16 11:39
(1)我们知道变量的定义基本形式是:类型说明符+一个或者多个标识符列表(以逗号隔开)+“;”结束。例如:
int a;
int mouth,day,year;
double price; 等等。
(2)那么指针的定义呢?在c++语言中,使用“*”符号把一个标示符声明为指针,例如:
int *p1,*p2;
string *pstring;
double *dp;
在有些时候你会看到指针的另一中声明(用空格将符号*和后面的标示符分隔开来): string* pS;(把pS定义为一个指向string类型的指针)。这是合法的。但是这样容易产生一种误解。在一个声明语句拥有多个标识符的情况下:string* ps1,ps2;实际上只把ps1定义为指针,而ps2不是,只是一个普通的string类型对象而已。所以习惯用这种方式的,得注意这点。
我们知道,对于一个指针的有效状态有三种:1、保存一个特定对象的地址,2、指向某个对象后面的另一个对象,3、0值(若指针保存0值,表面它不指向任何对象)。未初始化的指针是无效的,直到给指针赋值后,才能使用它。
int *pi=0;表示pi不指向任何对象。
int *pi1=&val;pi1指向对象val
pi1=0; pi1不指向任何对象
int *pi2=NULL; 等价于 int *pi=0;(注:编译时,会自动将NULL 换成0)
另外,c++提供了一种特殊的指针类型 void*,它可以保存任何类型对象的地址。void* 表明该指针与一地址相关,但不清楚存储在此地址上的对象的类型。所以,其支持的操作也有限:1、与另一个指针进行比较;
2、向函数传递void* 指针或从函数返回void*指针
3、给另一个void*指针赋值、
不允许使用void*指针操作它所指的对象。
(3)指向指针的指针
指针本身也是可用指针指向的内存对象。指针占用内存空间存放其值,因此指针的存储地址可存放在指针中。
int **p=&val; ——> 一个指向指针的指针,它指向的指针是指向一个整形数。
(4)指针与引用的比较
虽然引用(reference)和指针都可以间接访问另一个值,但它们有两个重要的区别。第一个区别,引用总是指向某个对象:定义引用时没用初始化是错误的;第二个区别,赋值行为的差异:给引用复制修改的是该引用所关联的对象的值,而并不是应用与另一个对象的关联。引用一经初始化,就始终指向同一个特定的对象。
int &r1=val1,&r2=val2;
r1=r2; 这个赋值操作修改了r1引用的值val1对象,而并非引用本身。赋值后,这两个引用还是分别指向原来关联的对象,此时这两个对象的值相等。
(5)指向数组元素的指针
int a[10]; //定义一个整形数组a,它有10个元素
int *p; //定义一个基类型为整形的指针变量p
p=&a[0]; ------p=a; (注:这两个是等价的)在c++中,数组名代表数组中第一个元素(序号为0的元素)的地址。
(6) 指向数组的指针
int (*p) [n]; //表示指针变量p指向的是含有n个整形元素的一维数组。
(7)指针数组
如果一个数组,其元素均为指针类型数据,该数组称为指针数组,也就是说,指针数组中的每一个元素相当于一个指针变量,它的值都是地址。一维指针数组的定义形式为:
类型名 *数组名[数组长度];
例如:
int *p[4];
可以用指针数组中各个元素分别指向若干个字符串,使字符串处理更加方便灵活。
(8)函数的指针
指针变量也可以指向一个函数。一个函数在编译的时候被分配一个入口地址。这个函数入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
定义指向函数的指针变量的方法是:函数类型 (*指针变量名) (函数形参表);
int (*p)(int ,int ); // int 表示指针变量p指向的函数的类型
//(int ,int )中 int 表示p指向的函数的形参类型
//p 表示指向函数的指针变量
(9)返回指针值的函数
一个函数可以返回一个整形值、字符值等等,也可以返回一个指针型的数据,即地址。返回指针值的函数简称为指针函数。
定义形式:
类型名 *函数名(参数列表);
int *max(int x, int y);
- c++中与指针相关一些基本知识
- C语言中关于数组、指针以及函数的一些基本知识
- C/C++中指针与数组的相关知识
- C 语言中指针、字符串与数组的一些关系
- 与类相关的一些指针
- apue 中c/s模式编程的一些基本知识
- C 语言指针的基本知识
- C 语言程序中与存储器相关的常见错误(即指针相关)
- C 语言程序中与存储器相关的常见错误(即指针相关)
- C语言一些基本知识整理
- C与指针 六 一些字符函数
- 一些Linux软件包相关的基本知识
- C语言中指针的一些问题
- C语言中指针的一些易错点!
- c语言中的指针(包括数组与指针相关)
- C中数组与指针
- C中指针 ++与*操作
- c中指针与引用
- 20140731
- Request的getParameter和getAttribute方法的区别
- c++中蓝牙编程的库类
- 数据按月统计
- STM32存储器 — <2>STM32存储器知识的相关应用(IAP、Bit Banding)
- c++中与指针相关一些基本知识
- jquery事件 【mousedown与mouseup ----keydown与keypress与keyup】focus--blur--orrer--pageX-pageY
- hdu4902
- BW:处理链报错自动邮件通知(方法2:Alert)
- 定制iOS 7中的导航栏和状态栏
- 墨菲定律、二八法则、马太效应、手表定理、“不值得”定律、彼得原理、零和游戏、华盛顿合作规律、酒与污水定律、水桶定律、蘑菇管理原理、钱的问题、奥卡姆剃刀等13条是左右人生的金科玉律
- 当前年、月、日、时、分、秒的获取
- Jquery attr("checked") 返回checked或undefined 获取选中失效
- 为多态基类声明virtual析构函数