MedicineCabint
2018-10-27 01:43
采纳率: 100%
浏览 1.4k

C++中关于两个*,即“**”的问题

#include
#include
using namespace std;
int main()
{
int i = 5;
int *p;
int **q;

cout << i<<'\n' << &i << endl;
p = &i;
(*q) = p;
cout << p << endl << *p << endl<<&p<<endl<<&*p<<endl;
cout << q << endl << *q << endl << **q << endl;
cout << &q <<endl << &(*q);

}
代码如上,为什么在编译的时候会说:使用了未初始化的局部变量“q”呢,求大神指点

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 风影-取名字真烦 2018-10-27 11:12
    已采纳

    你的程序是不对的,int **q告诉编译程序q所在的地方申请一个指针的长度,放入一个地址,而这个地址的值 将会放另一个int类型的数据块的地址
    而你在使用(*q)=p;的时候,q是一个32位的指针,因为未初始化,所以q里的值不是指向的一个正确的你能访问的地址,所以你使用*q来访问q的地址对应的数据值是完全不正确的
    只要做修改q=&p;那么就会把存放p这个指针的地址写入到q的空间,就没有任何问题了

    点赞 评论
  • jacksuperlan 2018-10-27 03:54

    应该是警告吧,大不子int*p=NULL, int **q=NULL;
    指针与数据是兄弟,int a[n]={0}; int *p=a; 而 int a[n][m]={{xx},{xx}} 那么 q=a;就行了,都是到了数组的头部。

    点赞 评论
  • blownewbee 2018-10-27 04:33
     int *p = NULL;
    int **q = NULL;
    就可以了。
    
    点赞 评论
  • s349146209 2018-11-13 08:00

    (*q) = p; 改成 q = &p 这句的时候q还取不了内容

    点赞 评论

相关推荐 更多相似问题