• C语言学习笔记(2)


    一. 数组与指针

    1.函数参数表中的数组实际上是指针

    sizeof(a) == sizeof(int * );
    int a[ ] ⇔ int *a
    以下四种函数原型是等价的:

    • int sum (int *ar, int n);
    • int sum (int ar[ ], int n);
    • int sum (int *, int);
    • int sum (int[ ],int);

    2. 数组变量是特殊的指针

    • 数组本身表示地址,

      • int a[10];
      • int *p = a; // 无需用&取变量
    • 数组的单元表达的是变量,需要用&取地址。

    • [ ]运算符可对数组做,也可对指针做 ;
      p[0] ⇔ a[0]

    • *运算符可以对指针使用,也可对数组做;

    • 数组变量是类型const指针,因此不能变赋值;
      int a[ ] ⇔ int *const b;

    二.指针运算

    (1)给指针加、减一个整数(+,+=,-,-=);
    (2)递增递减(++,--);
    (3)两个指针相减;

    1. 加减 :

    • 指针加一即指针所指地址值加上一个sizeof(指针所指类型),移动到下一单元格。
    • 指针1 - 指针2结果是单元格之差,并非地址的数值差:
      (指针1 - 指针2)/ sizeof(指针类型);

    2. *p++

    • 取出p所指的数据后,把p移动到下一单元格;
    • 用于数组类连续空间操作;
    • 在某些CPU上,这可以直接被翻译成一条汇编指令;

    3. 指针比较

    • <, <=,==,>,>=,!=可以对指针作比较(比较内存中的地址);
    • 数组中的地址是线性增加的。

    4. 0地址

    • 0地址通常是一个不能够随意碰的地址;
    • 指针不应该具有0值;
    • 用0地址通常表示特殊的事情:
      • 返回值无效的;
      • 指针没有被真正初始化。
    • NULL是一个预定义的符号,表示0地址

    5. 指针类型

    • 无论指向什么类型,所有的指针的大小都是一样的,因为都是地址;
    • 指向不同类型的指针是不能直接相互赋值的;这是为了避免用错指针。

    6. 指针作用

    • 需要传入较大的数据时用作参数;
    • 传入数组后对数组做操作;
    • 函数返回不止一个结果;
    • 需要用函数来修改不止一个变量;
    • 动态申请的内存。

    我的手写笔记


    MOOC代码

    产生的问题

    1.PTA

    解决: 通过查询资料得知:(*p)++ 先取指针p指向的值,再将该值自增1

    2.* p++的含义

    解决: 单目运算符 * 级别低于 ++ 及取出 P 中的值之后把P移到下一个位置。

    总结:

          1. *p++、(* p)++、* ++p、++* p 的区别
                 (1).  *p++   先取指针p指向的值,再将指针p自增1;
                 (2).  (*p)++ 先取指针p指向的值, 再将该值自增1;
                 (3).  *++p   先将指针p自增1, * 操作再取出该值;
                 (4).  ++*p   先取指针p指向的值, 再将该值自增1;
  • 相关阅读:
    WPF中DataGrid控件的数据绑定与显示数组
    WPF中添加个简单的显示当前系统时间的示例
    WPF中往ComboBox里添加选项并指定默认选项
    WPF中Button的四种状态
    Web安全新变化 智能手机是下一个进攻点 狼人:
    卡巴斯基重拳组合 高效应对高考网站挂马 狼人:
    DNS规模故障追踪:由24岁站长引发的蝴蝶效应 狼人:
    追踪多省网络故障:域名解析瘫痪后的连锁反应 狼人:
    化解SaaS安全问题的三大措施 狼人:
    报道称黑客利用微软IIS安全漏洞 入侵大学服务器 狼人:
  • 原文地址:https://www.cnblogs.com/ABClazyboy/p/12443542.html
Copyright © 2020-2023  润新知