*p1=a
*p2=b
*p1=6
*p2=12
这些都是非法 *** 作,指针没有初始化,就访问。
正确方法:
int a=5,b=10
int *p1,*p2
p1=&a // p1指向a的或灶地址
p2=&b // p2指向b的地址
*p1=6 // 给p1指向的内容赋值,也就是给a赋值。
*p2=12// 给p2指弯迅向的内容赋值,也就是给b赋值。
这样就实现了用指针变量间接访问另一个变量
一、newnew 是 c++ 的一个关键字。被当作像 +、-、* 、/ 一样的 *** 作符。它的 *** 作结果是在申请到一段指定数据类型大小的内存。
语法: 指针变量 = new 数据类型
new 将做三件事:
1、主动计算指定数据类型需要桥圆仿的内存空间大小;
2、返回正确的指针类型;
3、在分配内存的一,将按照语法规则,初始化所分配的内存。
这是什么意思呢?看看例子吧:
int* p
p = new int
和以往不一样,p 这回不再“寄人篱下”,并不是指向某个已存在的变量,而是直接指向一段由new 分配而来的新内存空间。
“p 指向一段由new 分配而来的新内存空间” 这句话等同于: “new 分配一段新的内存空间,然后将该内存空间的地址存入腔斗到变量p中。” 所以,最终p中仍然是存储了一个变量的地址,只是,这是一个“无名”变量。
指向原有的某个变量,和指向一段新分配的内存空间,有什么区别呢?
“原有的变量”,可以比喻成指向一间原有的,并且有主的房间。而“新分配的内存空间”,则像是一个“临时建筑物”。我们必须在不用它的时候,主动将它拆迁。拆迁的工作由delete来完成。
当指针变量通过 new ,而得到一个内存地址后,我们就可以像以前的所说的,通过该指针,通过*号,而对该内存地址(一个无名的变量),进行 *** 作。
如:敏纤
int* p = new int
*p = 100
cout <<*p <<endl
屏幕将输出100。
二、new时初始化
new 也可以在申请内存空间时,直接设置该段内存里要放点什么.
语法: 指针变量 = new 数据类型(初值)
结构体指针成员所指向变量,这个说法理解起来有点困难。从字面意思上看断句,有如下几种可能:告旅
首先定义一个包含所有可能情况的哗耐结构体:
struct test
{
int a
int *p
}
struct test t1, *t21
结构体/指针成员/所指向的变量。
结构体中有指针成员,乱友春然后要访问这个结构体成员指向的变量值。
那么可以*(t1.p)这种方式对p取值。
2
结构体指针/成员/所指向变量。
这种情况有两种方法可以访问:
*(t2->p)
或者
*(*(t2).p)
效果是一样的。
3
描述有误,实际为:
结构体指针所指向/成员变量。
同样有两种方法可以使用:
t2->p
或者
(*t2).p
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)