zoukankan      html  css  js  c++  java
  • 第26课 指针的本质分析

    1. 变量的回顾

      程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段内存空间呢?------------可以通过变量名访问存储空间

    2.  *号的意义

    (1)在指针声明时,*号表示所声明的变量为指针

    (2)在指针使用时,*号表示取指针所指向的内存空间中的值

          

      ①*号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值。

      ②变量p保存着变量i内存地址,即p==&i, *p==i

    【实例分析】指针使用示例

     1 #include <stdio.h>
     2 
     3 int main()
     4 
     5 {
     6 
     7     int i = 0;
     8 
     9     int* pI;
    10 
    11     char* pC;
    12 
    13     float* pF;
    14 
    15    
    16 
    17     pI = &i;
    18 
    19    
    20 
    21     *pI = 10;
    22 
    23    
    24 
    25     printf("%p, %p, %d
    ", pI, &i, i); //p == &i
    26 
    27     printf("%d, %d, %p
    ", sizeof(int*), sizeof(pI), &pI);
    28 
    29     printf("%d, %d, %p
    ", sizeof(char*), sizeof(pC), &pC);
    30 
    31     printf("%d, %d, %p
    ", sizeof(float*), sizeof(pF), &pF);
    32 
    33    
    34 
    35     return 0;
    36 
    37 }

    3. 传值调用传址调用

    (1)指针是变量,因此可以声明指针参数

    (2)当一个函数体内部需要改变实参的值,则需要使用指针参数

    (3)函数调用时,实参值将复制到形参

    (4)指针适用于复杂数据类型作为参数函数

    【编程实验】利用指针交换变量

     1 #include <stdio.h>
     2 
     3  
     4 
     5 int swap(int* a, int* b)
     6 
     7 {
     8 
     9     int c = *a;
    10 
    11    
    12 
    13     *a = *b;
    14 
    15    
    16 
    17     *b = c;
    18 
    19 }
    20 
    21  
    22 
    23 int main()
    24 
    25 {
    26 
    27     int aa = 1;
    28 
    29     int bb = 2;
    30 
    31    
    32 
    33     printf("aa = %d, bb = %d
    ", aa, bb);
    34 
    35    
    36 
    37     swap(&aa, &bb);
    38 
    39    
    40 
    41     printf("aa = %d, bb = %d
    ", aa, bb);
    42 
    43    
    44 
    45     return 0;
    46 
    47 }
    48 
    49  

    4.常量与指针

    (1)几种情况

      ①const int* p;   //p可变,p指向的内容不可变

      ②int const* p;   //p可变,p指向的内容不可变

      ③int* const p;   //p不可变,p指向的内容可变

      ④const int* const p; //p不可变,p指向的内容不可变

    (2)口诀:左数右指

      ①当const出现在*号左边时,指针指向的数据为常量

      ②当const出现在*号右边时,指针本身为常量

    【实例分析】常量与指针

     1 #include <stdio.h>
     2 
     3  
     4 
     5 int main()
     6 
     7 {
     8 
     9     int i = 0;
    10 
    11    
    12 
    13     const int* p1 = &i;
    14 
    15     int const* p2 = &i;
    16 
    17     int* const p3 = &i;
    18 
    19     const int* const p4 = &i;
    20 
    21    
    22 
    23     *p1 = 1;    // compile error
    24 
    25     p1 = NULL;  // ok
    26 
    27    
    28 
    29     *p2 = 2;    // compile error
    30 
    31     p2 = NULL;  // ok
    32 
    33    
    34 
    35     *p3 = 3;    // ok
    36 
    37     p3 = NULL;  // compile error
    38 
    39    
    40 
    41     *p4 = 4;    // compile error
    42 
    43     p4 = NULL;  // compile error
    44 
    45    
    46 
    47     return 0;
    48 
    49 }

    5. 小结

    (1)指针C语言中一种特别的变量

    (2)指针保存的值内存的地址

    (3)可以通过指针修改内存中的任意地址内容

  • 相关阅读:
    单向链表
    字符串的碎片整理。。。
    刷夜有感
    C中的枚举类型及一些用法
    hdu 1001(无赖的一种方法)
    加法器和布尔运算符
    《C和指针》学习笔记(4)
    Java中创建对象的5种方式 -[转] http://www.codeceo.com/article/5-ways-java-create-object.html
    程序员转行为什么这么难--[转]
    Tomcat 性能优化之APR插件安装 -- [转]
  • 原文地址:https://www.cnblogs.com/hoiday/p/10056054.html
Copyright © 2011-2022 走看看