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

  1. 复习

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

 

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

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

 

 

 

0 ‘\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 != '\0')

    {

        start++;

    }

 

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

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

    {

        end--;

    }

 

    int n = end - start + 1;

 

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

 

    char buf[100] = "aaaaaaaaaaaaaaaaaaa";

    strncpy(buf, start, n);

 

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

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

 

    return 0;

}

 

 

24 作业

 

posted @ 2019-01-03 23:34  hh9515  阅读(296)  评论(0编辑  收藏  举报