c++ pointer 与指针有关的问题

作者&投稿:庾别 (若有异议请与网页底部的电邮联系)
初学C++关于Reference和Pointer的困惑~

引用其实就是指向变量的别名,定义引用并没有开辟内存空间存储,而且必须要初始化,初始化后引用关系不能改变,和指针不同

假设p1地址为0x00,p2地址为0x10
*p1 = 10; //p1 地址 0x00 储存内容 10
*p2 = *p1; //p2 地址0x10 储存内容 10
p1 = p2; //p1 地址0x10 储存内容 10(现在p1就是p2)
*p1 = 20; //p1 地址0x10 储存内容 20
因为p2地址也是0x10,所以p2储存的内容是20

因为arr这个数组是一个局部的,仅在函数computeSquares内部有效,当这个函数结束的时候,系统会自动回收这个数组的空间,而如果这个时候还去访问的话,访问到的东西,肯定就不是自己想要的了。

可以使用动态分配内存: new
因为动态分配的内存,必须主动释放才行,系统不会自己回收。

局部变量在栈空间中分配内存,函数返回时栈指针回退,当主调函数继续调用其它被调函数时,栈指针上移,上一次函数调用所分配的空间会被本次调用覆盖,如果此时再引用原来的局部变量就会出现不可预见的结果。
所以返回局部数组arr[10]是不对的。可以将arr[10]设为全局变量(或静态局部变量)来解决这个问题:

//int arr[10];或者全局变量
int* computeSquares(int& n)
{
static int arr[10];
n = 10;
for (int k = 0; k < n; k++)
arr[k] = (k+1) * (k+1);
return arr;
}

因为这个你返回的指针所指向的内容 在函数调用完毕时就是一个不确定的值了,因为数组时局部的,函数调用完毕的时候会自动销毁的,虽然有个地址,但是地址所指向的内容是不对的,好好想想 ,呵呵,

希望我的回答能够帮到你。


上饶市18350231120: *pointer表示何意?如何使用? -
圣供洛奇: *pointer表示指针变量,这个是计算机编程c或c++语言特有的变量类型,一般用于存储某个变量的内存地址,比如 int *p,a=10; p=&a; 第一句定义了一个整形指针变量p和整形变量a,并给a 赋值10,第二局就建立了p 和a的联系,把a内存地址给了指针变量p(相当于把a的门牌号登记在p那了),从而可以根据p的值找到内存中a的位置,再对a进行下步运算操作.

上饶市18350231120: C++的pointer问题? -
圣供洛奇: 第一个是指针,接收指针类型的实参,第二个是引用,接收整型实参

上饶市18350231120: C++中指针做函参及其调用 -
圣供洛奇: 首先,pointer_1与pointer_2已经是指针类型了.就说明这两个变量是指针类型变量.其次,swap(int *p1,int *p2)函数的两个参数都是int*类型,直接传入pointer_1,pointer_2才是合理的.如果加入了*,那就说明传入的参数是**int类型,所以出错.

上饶市18350231120: c++指针相等的判定 -
圣供洛奇: C++指针存的是地址,地址是基本类型,因此,指针相等判断用语言内置的 相等测试运算符即可,语法:pointer1 == pointer2

上饶市18350231120: 在c++中使用指针时,怎么判断指针名前面加不加*,后面用来赋值的 需不需要加& 求高手解答 -
圣供洛奇: 1、"*"是解地址符,"&"是取地址符2、指针在声明时需要以:int *ponter=nullptr;的形式声明,声明过后直接使用其变量名pointer,不改变内容的情况下无需添加"*"符3、当需要使用pointer(保存的是地址)里面的数据(内容)时,需要使用"*"符.4、以:int &ref=pointer;形式声明时,代表声明一个变量,名为ref并取其地址.然后把指针的地址保存进去.5、只要谨记什么变量保存的是"地址",什么变量保存的是"内容",当不同的两者需要赋值时,便会出现"*"和"&"符,这样就不会有错误.

上饶市18350231120: C++ 中void show(int *pointer)什么意思 -
圣供洛奇: void show(int *pointer) 返回值是 void 函数名称是 show 参数是一个 int类型的指针 形参名称为 pointer 根据名称来推测,这个函数的功能,应该是打印输出pointer指针所指向变量的具体值.

上饶市18350231120: C++语言中,指针的英文单词是什么? -
圣供洛奇: 指针,Pointer item不是缩写,就是item,项目的意思 DLg是缩写,对话的缩写

上饶市18350231120: 请教C++中我看到有些函数定义成指针类型,定义成指针有什么意义用途呢? -
圣供洛奇: 指针函数是指带指针的函数,即本质是一个函数.我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针.其定义格式如下所示: 返回类型标识符 *返回名称(形式参数表) { 函数体 }返回类型...

上饶市18350231120: C语言的指针,又什么用?能用通俗的话讲讲什么是指针吗?最好结合例子 -
圣供洛奇: 在C语言中出现的数据都是存储在内存地址中的,为了方便的使用这些数据,我们定义了指针!例如:有这样一个整型变量:int a=1;int pointer=*a;那么pointer就是获得变量a使用权的引线!通俗的地说,指针就是指向地址空间的变量.当然,指针是很复杂的,比如高级的用法:指向指针的指针!不过指针使用不当会降低程序的可读性!指针最著名的用途就是有些函数,将实参传回,在修改形参的时候使得实际的结果改变!学好指针,对学好C语言,写出清晰的程序用处很大!在全国计算机等级考试二级考指针很多,但是三级上机和四级上机基本上不考了!

上饶市18350231120: 汇编语言里PTR什么意思? C++里面又是什么意思? -
圣供洛奇: ptr -- pointer (指针)缩写. 汇编里面ptr是规定的字 (保留字),mov ax,bx ;是把BX寄存器“里”的值赋予AX. c语言里ptr是程序员自己写的变量名字,不是保留字,当然,它也可以是指针. 当用dw和dt、db等时,就需要他来显示声明了. ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网