*&p 是指针的引用,还是引用的指针,有关内存的分配

hzhxxx 2011-03-25 05:20:14
rt,

void my_alloc(char *&p)
{
p = new char[100];
}

void my_alloc(char **p)
{
*p = new char[100];
}

void my_allocp(char *p)
{
p = new char[100];
}

int main(int argc,char *argv[])
{
char *p = 0;
my_alloc(p);
memset(p,0,100);
strcpy(p,"sssssss");
std::cout<<p<<endl;
delete []p;
p = 0;

int a = 10;
int &b = a;
b = 100;

my_alloc(&p);
memset(p,0,100);
strcpy(p,"sssssss");
std::cout<<p<<endl;
delete []p;
p = 0;
}
...全文
281 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzhxxx 2011-03-27
  • 打赏
  • 举报
回复

今天回去看可一下 BS 的 C++ program language,发现自己原来理解有错误;

int a = 0;
int &b = a;
int *p = &b;
p 并不是指向a的引用b 的指针,实际上p还是指向了a。
其实,根本不可能存在 指向引用的指针.

里面的一句话:

实际上,根本就没有能操作引用的运算符操作.


lire1213 2011-03-25
  • 打赏
  • 举报
回复
左结合,指针的引用
purewqk 2011-03-25
  • 打赏
  • 举报
回复
指针的引用...
pathuang68 2011-03-25
  • 打赏
  • 举报
回复
指针的引用。
应用的指针是非法的。

请看:

指针和引用的声明方式:
声明指针: char* pc;
声明引用: char c = 'A'
char& rc = c;

它们的区别:
①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。
②从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。
③ 从编译上看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针。
④不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。
⑤理论上,对于指针的级数没有限制,但是引用只能是一级。如下:
int** p1; // 合法。指向指针的指针
int*& p2; // 合法。指向指针的引用
int&* p3; // 非法。指向引用的指针是非法的
int&& p4; // 非法。指向引用的引用是非法的
注意上述读法是从左到右。
sghdls 2011-03-25
  • 打赏
  • 举报
回复

指针的引用

char *cp = "abc";
char *&p = cp;
cout<<p<<endl;


p是指针的引用, 是指针cp的同义词
hzhxxx 2011-03-25
  • 打赏
  • 举报
回复

void freePtr2(int*& p2)

{

//未释放内存前 -> p2 Address : 0012FEC8 p2 value : 003429B8,p2是一个指针的引用,即引用指向指针,记住引用的特点:对引用的对象直接操作。所以它的地址和值与栈外的main()函数中,p2的值是同一个。

delete p2; //对p2所引用的指针进行释放内存,即:系统回收main()函数中 p2的值 003429B8 地址处的内存。

p2 = NULL;//对main()函数中p2的指针赋以NULL值。

//释放内存后 -> p2 Address : 0012FEC8 p2 value : 00000000,由于操作的对象都是main()函数中的p2,所以它将应用到原变量中。

}
hzhxxx 2011-03-25
  • 打赏
  • 举报
回复

int a = 10;
int &b = a;
b = 100;
int * pp = &b;
*pp = 101;

实际上,
&a
pp
b
指向了同一个地址,同样的道理

*&p 指针的引用和引用的指针,实际是一样的。
个人认为,不知道是读作引用的指针好,还是指针的引用好....



CyberLogix 2011-03-25
  • 打赏
  • 举报
回复
是指针的引用
witwolf 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hzhxxx 的回复:]
int a = 10;
int &b = a;
b = 100;
int * pp = &b;
*pp = 101;

指向引用的指针也是有的,也是可以的。
[/Quote]
int *pp=&b;
&是取址的意思
把b的地址赋给pp
也就是pp指向b
hzhxxx 2011-03-25
  • 打赏
  • 举报
回复

int a = 10;
int &b = a;
b = 100;
int * pp = &b;
*pp = 101;

指向引用的指针也是有的,也是可以的。
hzhxxx 2011-03-25
  • 打赏
  • 举报
回复

*& 都是右边结合的,为什么不是引用的指针呢???
pengzhixi 2011-03-25
  • 打赏
  • 举报
回复
是指针的引用。 另外也不可能有指针指向一个引用的。
justkk 2011-03-25
  • 打赏
  • 举报
回复
指针的引用
witwolf 2011-03-25
  • 打赏
  • 举报
回复
指针的引用
可以看成
int* &p

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧