博客
关于我
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/

    你可能感兴趣的文章
    Node.js 文件系统的各种用法和常见场景
    查看>>
    Node.js 模块系统的原理、使用方式和一些常见的应用场景
    查看>>
    Node.js 的事件循环(Event Loop)详解
    查看>>
    node.js 简易聊天室
    查看>>
    Node.js 线程你理解的可能是错的
    查看>>
    Node.js 调用微信公众号 API 添加自定义菜单报错的解决方法
    查看>>
    node.js 配置首页打开页面
    查看>>
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js中环境变量process.env详解
    查看>>
    Node.js之async_hooks
    查看>>
    Node.js初体验
    查看>>
    Node.js升级工具n
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    查看>>
    node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
    查看>>
    Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
    查看>>
    Node.js安装及环境配置之Windows篇
    查看>>
    Node.js安装和入门 - 2行代码让你能够启动一个Server
    查看>>
    node.js安装方法
    查看>>