中易网

(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++不允许变量名在同一范围内使用相同的多个变量名称。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息