C/C++指针问题
我想研究一下指针的指针,编了下面一个程序,怎么运行的时候出现错误,显示内存不能为"written",请高手帮我分析一下,谢谢。#include<iostream.h>vo...
我想研究一下指针的指针,编了下面一个程序,怎么运行的时候出现错误,显示内存不能为"written",请高手帮我分析一下,谢谢。
#include <iostream.h>
void main()
{
int a=0;
int **aa;
*aa=&a;
cout<<aa<<endl;
cout<<*aa<<endl;
cout<<**aa<<endl;
}
即使去掉cout<<aa<<endl;这个语句,也是一样。 展开
#include <iostream.h>
void main()
{
int a=0;
int **aa;
*aa=&a;
cout<<aa<<endl;
cout<<*aa<<endl;
cout<<**aa<<endl;
}
即使去掉cout<<aa<<endl;这个语句,也是一样。 展开
2个回答
展开全部
aa是一个指针,并且是一个指向指针的指针,那么,*aa就是aa所指向的变量,这个变量当然也是个指针,要得到*aa这个指针所指向的变量,就继续在前面加个星号(*),就是说:**aa指向了最终的那个变量,也就是整型变量a。
当我们要调用**aa时,必须保证*aa不为空且不为野指针;但要调用*aa,又必须保证aa不为空且不为野指针。所以,归根到底,是要先对aa初始化,然后才是对*aa初始化。而你的代码从一开始就对*aa进行初始化,就意味着让aa所指向的变量为&a,可是aa自己都还没有被初始化,又上哪去找aa所指向的变量呢?
所以,这个代码你这样写:
#include <iostream>
using namespace std;
void main()
{
int a=0;
int *b = &a;
int **aa = &b; //这里是对aa进行初始化
cout<<aa<<endl;
cout<<*aa<<endl;
cout<<**aa<<endl;
}
多重指针的问题本来就很绕,如果你对上面的解释有疑惑的地方,欢迎讨论。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询