TypechoJoeTheme

日志随记

统计
登录
用户名
密码

扫码登录
/
注册
用户名

此用户名将作为登录时所用的账号

邮箱

XG.孤梦

随风而动,随遇而安......

C语言指针-学习二十二

XG.孤梦博 主大佬
2022-02-16
/
0 评论
/
1,139 阅读
/
610 个字
/
百度已收录
02/16
本文最后更新于 2022年08月13日,已超过 714天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

地址和指针的概念

如果在程序中定义了一个变量,在对程序进行编译时,系统就会给该变量分配内存单元

  • 内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。
  • 在地址所标识的内存单元中存放数据,这相当于馆房间中居住的旅客-样。
  • 由于通过地址能找到所需的变量单元,我们可以用地址指向该变量单元,将地址形象化地称为“指针”

  • 为了表示将数值3送到变量 i 中,可以有两种表达方法:

    • 1.直接存取

      • 例如: i=3;
    • 2.间接存取

      • 例如:*i_ad=3; 其中 *i_ad 表示 i_ad 指向的对象
  • 假设 i_ad 中的值是变量 i 的地址(2000),这样就在 i_ad 和变量 i 之间建立起一种联系,即
    通过 i_ad 能知道 i 的地址,从而找到变量 i 的内存单元
  • 由于通过地址能找到所需的变量单元,因此说,地址指向该变量单元将地址形象化地称为“指针”
    通过它能找到以它为地址的内存单元
  • 一个变量的地址称为该变量的“指针”

    • 例如:地址2000 是 变量 i 的指针
  • 如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量”
    指针变量就是地址变量,用来存放地址的变量,指针变量的值是地址(即指针)

    • 例如:i_ad 就是一个指针变量

指针变量的定义

  • 一般形式为:

    • 类型 *指针变量名;
  • 例如:

    • int *addr_a, *addr_b;
    • int 是为指针变量指定的 “基类型
    • 基类型指定指针变量可指向的变量类型
      如 addr_a 可以指向整型变量,但不能指向浮点型变量
  • 注意:

    • *addr_a = &a; 错误的
    • addr_a = &a; 正确的
    • float *addr_f;
      addr_f = &a; 错误的,a 为int类型,addr_f 为float类型
  • 例子

通过指针变量访问整型变量。

#include <stdio.h>

void main() {
    int a = 10, b = 100;
    int *addr_a, *addr_b;   // 定义指针变量

    addr_a = &a;    // 使addr_a指同a
    addr_b = &b;    // 使addr_b指同b

    printf("a = %d, b = %d\n", a, b);   // 直接输出 a,b的值
    printf("addr_a = %d, addr_b = %d\n", *addr_a, *addr_b);  // 间接输出 a,b的值
}


指针变量的引用

  • 在引用指针变量时,可能有三种情况:

    • 1.给指针变量赋值。

      • 例如: p = &a;
  • 2.引用指针变量指向的变量。
  • 例如: p = &a; *p = 1;
  • 引用指针变量的值

    • 例如:printf("%o", p); 以八进制输出a的地址
  • & 取地址运算符

    • &a 是变量 a 的地址
  • * 指针运算符 (“间接访问”运算符)

    • 例如: p 指向变量 a, 则 *p 就代表 a
  • 例子
#include <stdio.h>

void main() {
    int a,b,c,d,e,*p;
    a = 100;
    p = &a;
    b = *&a;
    printf("a=%d\n", a);
    printf("p=%d\n", p);
    printf("*p=%d\n", *p);
    printf("*&a=%d\n", b);
    c = (*p)++;
    printf("(*p)++ = %d\n", c);
    printf("a = %d\n",a);
}


#include <stdio.h>

void main() {
    int m, n, *p1 = &m, *p2 = &n, *phint = NULL;
    m = n = 6;
    printf("m=%d,n=%d\n", m, n);
    printf("*p1=%d,*p2=%d\n", *p1, *p2);
    printf("p1=%d,p2=%d\n", p1, p2);
    printf("phint=%d\n", phint);
}

#include <stdio.h>

void main() {
    int m, n, *p1 = &m, *p2 = &n, *phint = NULL;
    m = n = 6;

    *p1 += 3;
    p2 = p1;
    *p2*=4;
    phint = p2;
    printf("*p1=%d,*p2=%d\n", *p1, *p2);
    printf("p1=%d,p2=%d\n", p1, p2);
    printf("m=%d,n=%d\n", m, n);
    printf("phint=%d\n", phint);
    printf("*phint=%d\n", *phint);
}


学习笔记C语言
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

日志随记

本文链接:

https://www.xggm.top/archives/583.html(转载时请注明本文出处及文章链接)

评论 (0)
 
登录
X
用户名
密码