(C++)关于指针
答案:5 悬赏:70
解决时间 2021-04-28 03:29
- 提问者网友:生亦何欢
- 2021-04-27 14:06
谁能以下面的例子帮我解释下指针不,越详细越好。谢谢啊
还有另一个问题就是 为什么把int**a换成int**iptr就提示出现错误呢????
#include"iostream.h"
int main()
{
int i=3;
int*iptr=&i;
int**a=&iptr;
cout<<"Address of Var i="<<iptr<<endl;
cout<<"Data of Var i="<<*iptr<<endl;
cout<<"Address of Pointer iptr="<<a<<endl;
cout<<"Address ofVar i="<<*a<<endl;
*iptr=2+*iptr;
cout<<"Data of Var i="<<*iptr<<endl;
return 0;
}
最佳答案
- 二级知识专家网友:寂寞的炫耀
- 2021-04-27 14:14
1类型与变量
1> 指针(地址)在内存中的编号叫地址,*指针表地址里存的数据如:
A=99; &a=2000; p=a; 这的指针(地址)编号是2000 找到地址2000 *p存值为99;
P的属性:类型、名、大小(2字节)。可称a的指针是2000。指针p的地址是2000。
2> 指针变量:用来专存放地址的变量叫指针变量。
3> 常量指针:必需有一个地址指向它。(地址不可修改,值可修改) * const p
4> 指针常量:必需有一个值赋给它。(地址可修改,值不可修改) const *p
5> 符号常量:符号常量必须要它的值。
6> 变量:给定值后他们的地址不可再改变,值可改变。
常量:给定值后他们的地址和值都不可再改变。
int*iptr=&i; // 将i的地址给iptr
int**a=&iptr; // 将iptr的地址给a。这是二级指针!
为什么把int**a换成int**iptr就提示出现错误呢????
int*iptr=&i, iptr存放的是i的地址
**a=&iptr可想成:iptr值就是一个地址 *a=iptr成立;若:&iptr就是这个指针变量的地址 也就是地址的地址,所以就是**a才能与此同时Iptr成立。因为**a也是地址的地址。
上面也说了指针变量与指针是有区别的。
指针变量就是 存放地址的变量。而指针就是址地~~~
全部回答
- 1楼网友:时光挺欠揍
- 2021-04-27 16:13
//为什么把int**a换成int**iptr就提示出现错误呢????
#include"iostream.h"
int main()
{
int i=3; //定义一个整型变量 i ,并初始化 i=3
int*iptr=&i; //定义一个整型指针 *iptr,存放 整型变量 i 的地址
int**a=&iptr; //定义一个整型二重指针 **a ,存放着 指针 *iprt的地址;
cout<<"Address of Var i="<<iptr<<endl; //输出 i 的地址,即 iptr 的值;
cout<<"Data of Var i="<<*iptr<<endl; //输出 i,使用的是指针间址访问方式, *iptr 指向变量 i,
cout<<"Address of Pointer iptr="<<a<<endl; //输出指针 iptr 的地址,即 二重指针 a 的值,a指向 iptr.
cout<<"Address ofVar i="<<*a<<endl; //输出 iptr的值,使用指针间址访问, a 里面存的是 iptr 的地址
*iptr=2+*iptr; // 使指针 iptr 用间址访问的方式来表达 i的重新赋值,实际上等价于 i=2+i;
cout<<"Data of Var i="<<*iptr<<endl; //输出 i的值
return 0;
}
- 2楼网友:滚刀废物浮浪人
- 2021-04-27 15:50
#include<iostream>
using namespace std;
int main()
{
int i=3;
int*iptr=&i; // 将i的地址给iptr
int**a=&iptr; // 将iptr的地址给a。这是二级指针!
cout<<"Address of Var i="<<iptr<<endl; // 这里就是打印i的地址了撒
cout<<"Data of Var i="<<*iptr<<endl;//这里就是间接访问i的值
cout<<"Address of Pointer iptr="<<a<<endl;这里是打印iptr的地址,也就是i的地址的地址
cout<<"Address ofVar i="<<*a<<endl;这里是打印iptr里面的值,间接访问i的地址。
*iptr=2+*iptr;这里是相当于:i = 2 + i 带*的指针访问就是访问该指针指向的内存里面的值
cout<<"Data of Var i="<<*iptr<<endl;
return 0;
}
要这样写 C++里面的头文件iostream没有.h。
你应该用的是VC6吧 已经太老了。
你这程序没有错的哈!
- 3楼网友:星星坠落
- 2021-04-27 15:35
什么意思,你那样不是重复定义了么
- 4楼网友:错过的是遗憾
- 2021-04-27 14:53
int*iptr=&i; //声明iptr指针变量,并指向i
int**a=&iptr; //声明a指针变量,并指向iptr
cout<<"Address of Var i="<<iptr<<endl; //输出iptr自己,这行的运行结果是乱码
cout<<"Data of Var i="<<*iptr<<endl; //输出iptr指向的内容,也就是i的值3
cout<<"Address of Pointer iptr="<<a<<endl; //输出a自己,这行的运行结果也是乱码
cout<<"Address ofVar i="<<*a<<endl; //输出a指向的内容,也就是iptr的值,这行的运行结果也是乱码
*iptr=2+*iptr; //iptr所指的内容+2,即i+2,这行改为*iptr+=2;看起来更适合C++的编写习惯
cout<<"Data of Var i="<<*iptr<<endl; //输出iptr指向的内容,也就是i的值5
把int**a换成int**iptr就肯定出现错误,因为你这相当于把iptr声明了两次,C++不允许变量名在同一范围内使用相同的多个变量名称。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息