博客
关于我
C语言指针的那些子事儿
阅读量:390 次
发布时间:2019-03-05

本文共 1631 字,大约阅读时间需要 5 分钟。

C语言入门学习指南

1. 指针基础概念

指针是计算机编程中至关重要的概念,它代表内存地址。一个变量的地址就是该变量的指针。简单来说,指针变量存储的是内存中某一位置的地址。

  • 指针变量的定义与用途

    指针变量用于存储内存地址,类似于电话本中的电话号码。它可以让程序访问内存中的数据,完成数据的读写操作。

  • 指针表示法

    int * pointer 表示 pointer 是一个整数类型的指针变量,可以存储其他内存地址。&i 用于获取变量 i 的地址,pointer = &i 表示将 i 的地址赋值给 pointer


2. 指针与 scanf 函数

scanf 函数用于从标准输入读取数据,但需要注意以下几点:

  • 字符数组存储

    scanf 可以直接将字符数组赋值,但不能直接赋值给指针变量。

  • 数组与指针的区别

    字符串数组的名字其实就是指向数组起始地址的指针。数组名可以直接用于 scanf 函数,而指针变量需要事先分配内存。

  • 内存分配与使用

    使用 scanf 赋值字符串指针时,必须先分配内存。这可以通过以下方式实现:

    char *name = (char *)malloc(100); // 分配100字节内存scanf("%s", name); // 读取并存储字符串free(name); // 释放内存

3. 小知识点解析

  • 指针变量与内存地址的关系

    指针变量存储的是内存地址,但指针本身并不等同于地址。

  • 指针变量的可变性

    指针变量存储的地址可以随意修改,但修改后的地址可能指向无效内存,导致程序崩溃。

  • 函数参数与指针

    函数接收指针作为参数时,函数内部会自动将指针转换为相应类型的指针变量。

  • 字符串字面量与指针的区别

    字符串字面量不是变量,而是直接嵌入到程序中的常量。

  • 指针操作的含义

    *pointer 表示取出指针变量 pointer 所指的内存地址中的值。

  • 不同类型指针的内存分配

    • int 类型指针会分配4字节内存。
    • char 类型指针会分配1字节内存。

  • 4. 实践练习

    (1)输入两个整数并按顺序输出

    int a, b;scanf("%d %d", &a, &b);printf("a=%d, b=%d\n", a, b);

    (2)实现交换两个整数

    int x, y;x = 10;y = 20;// 通过指针交换变量int *p = &x;int *q = &y;int temp = *p;*p = *q;*q = temp;printf("x=%d, y=%d\n", x, y);

    (3)输入三个整数并输出它们的和

    int a, b, c;scanf("%d %d %d", &a, &b, &c);printf("总和为:%d\n", a + b + c);

    5. 动态内存管理

    malloc.h 与内存分配

    • malloc 函数

      分配指定字节大小的内存:

      void *malloc(size_t size);

      返回值:指向分配内存的起始地址。

    • calloc 函数

      分配多个大小为 size 的内存块,并初始化为0:

      void *calloc(size_t count, size_t size);
    • 内存释放

      使用 free 函数释放分配的内存,并设置指针为 NULL

      free(arr);arr = NULL;

    6. 指针与数组的关系

    • 数组名实际上是一个指针,指向数组的起始地址。
    • scanf 可以直接读取数组,但指针变量需要事先分配内存。

    7. 指针的深度理解

    • 双重指针

      int **q; // 指向整数类型的指针变量int *p = &a; // p 是指向整数 a 的指针q = &p; // q 是指向整数 a 的地址指针

      *q 获取 p 的地址,*p 获取 a 的值。

    • 内存分配与释放

      动态分配内存时,确保释放内存以避免内存泄漏。


    通过以上内容的学习与实践,你应该能够掌握指针的基础概念、scanf 函数的使用规则以及动态内存管理的方法。

    转载地址:http://bewzz.baihongyu.com/

    你可能感兴趣的文章
    NSRange 范围
    查看>>
    NSSet集合 无序的 不能重复的
    查看>>
    NSURLSession下载和断点续传
    查看>>
    NSUserdefault读书笔记
    查看>>
    NS图绘制工具推荐
    查看>>
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    NT symbols are incorrect, please fix symbols
    查看>>
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>
    NTFS文件权限管理实战
    查看>>
    ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
    查看>>
    ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
    查看>>
    ntp server 用法小结
    查看>>
    ntpdate 通过外网同步时间
    查看>>
    ntpdate同步配置文件调整详解
    查看>>
    NTPD使用/etc/ntp.conf配置时钟同步详解
    查看>>
    NTP及Chrony时间同步服务设置
    查看>>
    NTP服务器
    查看>>
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>
    NuGet Gallery 开源项目快速入门指南
    查看>>