王清欢Randy 王清欢Randy
首页
  • 编程语言

    • C/C++ 学习笔记
    • Golang 学习笔记
  • 算法分析

    • LeetCode 刷题笔记
  • 操作系统

    • Linux 基础
    • Vim 实用技巧
    • Shell 脚本编程
    • GDB 学习笔记
  • 开发工具

    • Git 学习笔记
  • 分布式理论

    • 共识算法
    • 分布式事务
  • 数据库内核

    • PostgreSQL
    • Postgres-XL
  • hidb
  • pgproxy
  • 实用技巧
  • 学习方法
  • 资源分享
GitHub (opens new window)
首页
  • 编程语言

    • C/C++ 学习笔记
    • Golang 学习笔记
  • 算法分析

    • LeetCode 刷题笔记
  • 操作系统

    • Linux 基础
    • Vim 实用技巧
    • Shell 脚本编程
    • GDB 学习笔记
  • 开发工具

    • Git 学习笔记
  • 分布式理论

    • 共识算法
    • 分布式事务
  • 数据库内核

    • PostgreSQL
    • Postgres-XL
  • hidb
  • pgproxy
  • 实用技巧
  • 学习方法
  • 资源分享
GitHub (opens new window)
  • C语言基础

    • 数据类型
    • 指针与字符串
      • 2.1指针的使用
      • 2.2指针的计算
      • 2.3字符串操作
      • 2.4函数的指针
    • 结构类型
    • 链表
    • 程序结构
    • 文件
  • C++面向对象编程

    • C++面向对象

      • 从 C 到 C++
      • C++ 类和对象基础
      • C++ 构造函数与析构函数
      • C++ 类和对象提高
      • 运算符重载
      • C++ 继承
      • C++ 多态
    • C++ STL

      • C++ 输入输出流
      • C++ 泛型编程
      • C++ string类
      • C++ 标准模板库 STL 概述
      • C++ 标准模板库 STL 顺序容器
      • C++ 标准模板库 STL 函数对象
      • C++ 标准模板库 STL 关联容器
      • C++ 标准模板库 STL 容器适配器
    • C++ 新特性

      • C++11 新特性
  • C&Cpp学习笔记
  • C语言基础
王清欢
2023-11-18
目录

指针与字符串

# 指针与字符串

# 2.1指针的使用

  • 函数返回多个值,通过指针返回结果,指针作为形式参数 2.1.1.c
  • 函数返回运算状态,结果通过指针返回。即C语言中的try/catch 2.1.2.c
  • 指针在使用之前一定要初始化,赋予指针变量地址
  • 对数组进行操作
  • 动态申请内存空间

指针与数组

  • 数组变量是特殊的指针

    //以下四中函数原型是等价的  数组名即为数组首地址是特殊的指针
    int sum(int *array, int n);
    int sum(int *, int);
    int sum(int array[], int n);
    int sum(int [], int);
    
    int array[5]; // array ==  &array[0]
    
  • 数组变量是const类型的指针,不可以被改变,不能被赋值

指针与const

  • const指针,int * const p ;与数组变量类似,表示一旦得到了某个变量地址,不能再指向其他变量,即不能作为游标来扫描。(指针不可修改)
  • const int *p;或者int const *p表示不能通过该指针去修改这个变量,*p是const不可修改。(通过指针不可修改)
  • const int a[5]; const数组,数组元素不可修改

# 2.2指针的计算

  • 指针计算:对应地址空间(地址块为单位移动)

  • 指针可以进行的运算:

    1. 指针加或减一个整数
    2. 递增递减 ++/--
    3. 两个指针相减(得到sizeof的个数)
  • *p++用于地址空间遍历:2.2.1.c

    1. *p++的含义:取出p所指的内容,并移到下一个位置
    2. ++的优先级高于*
    3. 常用于连续地址空间的遍历
  • 0地址,不可使用的地址一般编译器中用NULL表示

动态内存分配malloc free 2.2.2.c

  • malloc申请内存空间的大小是以字节为单位的
  • malloc返回的结果是void*类型的,使用时需要进行类型转换
  • malloc申请空间失败会返回NULL
  • free只能用于malloc申请来的地址,地址被修改后无法free

# 2.3字符串操作

  • putchar(),getchar():在保准输入输出读写单个字符

  • 字符串数组:

    1. char **a:a是一个指针,指向另一个指向字符(串)的指针
    2. char a[][]:a是一个字符二位数组
    3. char *a[]:a是一个指针数组,数组元素都是指向另一个字符串的指针
  • int main(int argc, int const *argv[]):argv[0]是命令本身,后续为符号链接的名字(额外学习busybox)

  • 字符串函数:#include <string.h>: strlen(); strcmp(); strcpy();

# 2.4函数的指针

  • 指向函数的指针:void (*pf)(int) = f;

  • 根据用户输入决定调用的目标函数2.4.1.c

    int i = 0;
    void (*fa[])(int) = {f,g,h,k};
    scanf("%d",&i);
    if(i>=0 && i<sizeof(fa)/sizeof(fa[0])){
        (*fa[i])(0);
    }
    
上次更新: 2023/11/19, 12:55:48
数据类型
结构类型

← 数据类型 结构类型→

Theme by Vdoing | Copyright © 2023-2024 Wang Qinghuan | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式