欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

指向指针的指针(int **)

程序员文章站 2022-03-26 12:37:36
...

1. 指向整形指针变量的指针(int **)

示例代码1

#include<iostream>
using namespace std;
int main()
{
    int a[5]={1,2,3,4,5},*p=a;
    int **q = &p;
    cout<<"a="<<a<<endl
        <<"p="<<p<<endl
        <<"&p="<<&p<<endl
        <<"q="<<q<<endl
        <<"&q="<<&q<<endl
        <<"**q="<<**q<<endl;
    for(int i=0;i<5;i++)
        cout<<"&a["<<i<<"]"<<&a[i]<<endl;
    return 0;
}

运行结果:
指向指针的指针(int **)
从运行结果可以看出,q指针所指向的空间中存储着指针p所在内存空间的地址,p指针所指向的内存空间中存储着数组a的首地址;故q表示取q所指空间中的值,**q表示q所指内存空间中的地址指向的那个内存空间中的值。(在c++中 星号(*)表示取内存空间中的值)。
为了便于理解,模拟内存存储情况:
指向指针的指针(int **)

2. 指向字符指针变量的指针(char **)

示例代码2

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char *a[]={"my","name"};
    char **p = a;
    for(int i=0;i<2;i++)
        for(int j =0;j<strlen(a[i]);j++)
            cout<<"&a["<<i<<"]"<<"["<<j<<"]="<<(void *)&a[i][j]<<endl;
    for(int i=0;i<2;i++)
        cout<<"&a["<<i<<"]="<<&a[i]<<endl
            <<"a["<<i<<"]="<<(void *)a[i]<<endl;
    cout<<"&p="<<&p<<endl
        <<"p="<<p<<endl;
    return 0;
}

运行结果
指向指针的指针(int **)
字符串指针输出遇到’/0’结束输出,其中(void *)用于提取地址,在字符指针中输出地址必须用这个方式。内存示意图如下:
指向指针的指针(int **)
从图中可以看出在64位系统中,一个字符指针占8个字节(在32位系统中一个字符指针占4个字节);一个字符(char)占一个字节;
参考:https://blog.csdn.net/g200407331/article/details/52610150

相关标签: 指针