栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言变量地址、指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言变量地址、指针

目录
  • 1. 地址
    • 1.1 图文解析
    • 1.2 测试代码
    • 1.3 测试结果
  • 2. 指针
    • 2.1 图文解析
    • 2.2 测试代码
    • 2.3 测试结果
  • 3. 指针链接
    • 3.1 图文解析
    • 3.2 测试代码
    • 3.3 测试结果
  • 4. 多级指针
    • 4.1 图文解析
    • 4.2 测试代码
    • 4.2 测试结果

1. 地址 1.1 图文解析

变量的地址,顾名思义,就是类似现实生活中每个人的地址,比如某个人的地址为
<河北省安阳市金山屯区宝山路32号真新六街坊>(随机生成的)
于是我们可以通过该地址找到具体的某个人,也可以通过该地址寄信件、发快递等等

而在C语言中,变量也同样像每个人一样,也有各自的地址,通过&来获取变量地址

1.2 测试代码
#include 
int main()
{
    int x;
    printf("x的地址 = %x", &x);	//输出十六进制地址值
    return 0;
}
1.3 测试结果

2. 指针 2.1 图文解析

通过上面我们已经了解了地址,但是我们如何通过根据地址来寻找变量呢,于是就有了指针,通过指针,我们就能找到具体的变量
同时指针本身也是一个变量,用于存储地址, 本身也有地址。

2.2 测试代码
#include 
#include 
int main()
{
    
    int *p;
    // 为指针p分配可用的内存地址
    p = (int *)malloc(sizeof(int));

    printf("指针p的地址 = %xn", &p);
    printf("指针p的值 = %xn", p);
    printf("指针p所指向的地址中存储的值 = %dnn", *p);
    
    int x = 1;
    printf("x的值 = %dn", x);
    printf("x的地址 = %xnn", &x);

    p = &x;     //将变量x的地址赋值给指针p

    printf("指针p的值 = %xn", p);
    printf("p指向的变量值 = %dnn", *p);

    return 0;
}
2.3 测试结果

3. 指针链接 3.1 图文解析

既然指针也是一个变量,那么我们不就可以用指针存储另一个指针的地址吗
那么,套娃开始!

3.2 测试代码
#include 
#include 
int main()
{
    int *p1, *p2;
    // 为指针变量分配可用的地址
    p1 = (int *)malloc(sizeof(int));
    p2 = (int *)malloc(sizeof(int));

    printf("指针p1的地址 = %xn", &p1);
    printf("指针p1的值 = %xnn", p1);

    printf("指针p2的地址 = %xn", &p2);
    printf("指针p2的值 = %xnn", p2);

    int x = 1;
    printf("x的值 = %dn", x);
    printf("x的地址 = %xnn", &x);

    p1 = (int *)(&p2);
    p2 = &x;

    printf("p1(%x) = %x -> p2(%x) = %xn", &p1, p1, &p2, p2);
    printf("p1指向的变量值 = %xn", *p1);
    printf("p2指向的变量值 = %dn", *p2);

    return 0;
}
3.3 测试结果

4. 多级指针 4.1 图文解析

而实际上为了更方便地使用套娃指针,我们可以用 **p, ***p, ****p, *****p… 这种方式来定义一个多级指针。

4.2 测试代码
#include 
#include
int main()
{
    
    int **p, *q;

    p = (int **)malloc(sizeof(int*));
    q = (int *)malloc(sizeof(int));

    printf("指针p的地址 = %xn", &p);
    printf("指针p的值 = %xn", p);
    printf("指针*p的值 = %xnn", *p);
    
    
    printf("指针q的地址 = %xn", &q);
    printf("指针q的值 = %xnn", q);
    
    int x = 1;
    printf("x的值 = %dn", x);
    printf("x的地址 = %xnn", &x);

    q = &x;
    p = &q;

    printf("p(%x) = %x -> *p(%x) = %xn", &p, p, &(*p), *p);
    printf("指针p最终指向的地址内容 = %dn", **p);
    return 0;
}
4.2 测试结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/868988.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号