• C语言基础 (9) 数组指针


    1. 复习

    只要把地址拿到就能这么操作.. (这里是合法的地址,不是野指针)

    1. 只有定义变量后,此变量的地址才是合法的地址
    2. 野指针就是保存没有意义地址的指针变量
    3. 操作野指针变量本身不会有任何问题
    4. 操作野指针所指向的内存才导致段错误

    (操作系统的内存不是你想用就用的)

    0 ‘’ NULL是一个东西

    02 作业讲解

    03 指针数组

    指针数组 它是数组

    03 数组指针

    int *p[10];

    (!注意: char *a, int *b, double *c 的size of 都是4

            应该是根据编译器 就像void* 长度是由编译器决定的

    04 值传递

    05 地址传递

    值传递就是把内存中的那部分内容传递了一份(也就是复制了一份

    引用传递是把地址传递过去

    06 形参中的数组

    // 形参中的数组,不是数组,它是普通指针变量

    // 形参数组 int a[100000] int a[] int *a对编译器而言,没有任何区别

    // 编译器都是当作int *处理

    // 形参中的数组和非形参数组区别:

    // void print_array[int a[100000]]

    // void print_array(int a[]) 

    07 返回局部变量的地址

    指针数组,它是数组,每个元素都是指针

    数组指针,它是指针,指向数组的指针 (就业班 这里不讲)

    int b[10][10]

    fun(b)

    void fun(int b[10][10]); // ok

    void fun(int **p); //err,二维数组不是二级指针

    int *fun(); //返回值是指针类型,指针函数

    (这段代码在不同编译器下表现不一样,主要是局部函数中的变量地址 当函数结束时是否被释放, 所以建议不要引用局部函数中的变量地址

    8 返回全局变量地址

     

    9 字符串打印说明

     

    10 上午知识点复习

    11 字符指针

    12 字符串拷贝问题

    13 字符串拷贝功能的实现

    14 课堂答疑

    15 const修饰的字符指针

    16 字符串常量

    17 文字常量区不允许修改

    打印出来是一样的

    // 2、字符串常量,文字常量区的字符串,只读,不能修改

    还有一种要注意的错误:

     

    (段错误)

    18 文字常量区不能修改2

    19 字符串常量初始化问题

    20 main形参使用说明

     

     

    注意:两个**的不是接二维数组的,是接指针数组的

    讲一下main函数的参数:

    发现其实和之前的是一个套路:

    (第0个参数 第1个参数 第2个参数…

    在继续深入..

    cp和mv就是C语言写的

    后面就是传的参数

    21 课堂答疑

    (如果printf %x a和&a[0] 是同一个地址

    但是sizeof的时候结果是不一样的

    22 查找匹配字符串出现次数

    23 两头堵模型

    #include <stdio.h>

    #include <string.h>

     

    int main(int argc, char const *argv[])

    {

        char *p = "       123456789        ";

        char *start = p;               // 首元素地址

        char *end = p + strlen(p) - 1; // 尾元素地址

     

        // 从左往右

        while (*start == ' ' && *start != '')

        {

            start++;

        }

     

        // 从右往左     注意这个 end!=p 简直骚操作

        while (*end == ' ' && end != p)

        {

            end--;

        }

     

        int n = end - start + 1;

     

        printf("n = %d ", n);

     

        char buf[100] = "aaaaaaaaaaaaaaaaaaa";

        strncpy(buf, start, n);

     

        buf[n] = 0; // 结束符

        printf("buf = %s ", buf);

     

        return 0;

    }

    24 作业

  • 相关阅读:
    Welcome to Swift (苹果官方Swift文档初译与注解十一)---70~76页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解十)---63~69页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解九)---58~62页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解六)---35~44页 (第一章完)
    CSS3如何实现2D转换和3D转换,他们有何区别
    表格列布局系列如何灵活把握列宽
    如何将多行数据以分组的形式对齐到单元格的上,中或下位置
    媒体查询的应用以及在css3中的变革
    样式表优先级顺序
    创建热点区域
  • 原文地址:https://www.cnblogs.com/eret9616/p/10217578.html
Copyright © 2020-2023  润新知