• C语言-指针深度分析


    1、变量回顾

                程序中的变量只是—段存储空间的别名,那么是不 

                是必须通过这个别名才能使用这段存储空间? 

    2、思考

    下面的程序输出什么?为什么?

    1 int i = 5;   
    2 int* p = &i;   
    3   
    4 printf("%d, %p
    ", i, p);  
    5    
    6 *p = 10;   
    7   
    8 printf("%d, %p
    ", i, p);   

    3、*号的意义

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

      在指针使用时,*号表示指针所指向的内存空间中的

    *相当于一把钥匙,通过这把钥匙打开内存,读取内存中的值。

    4、实例分析

     1 #include <stdio.h>  
     2   
     3 int main()  
     4 {  
     5     int i = 0;  
     6     int* pI;  
     7     char* pC;  
     8     float* pF;  
     9       
    10     pI = &i;  
    11       
    12     *pI = 10;  
    13       
    14     printf("%p, %p, %d
    ", pI, &i, i);  
    15     printf("%d, %d, %p
    "sizeof(int*), sizeof(pI), &pI);  
    16     printf("%d, %d, %p
    "sizeof(char*), sizeof(pC), &pC);  
    17     printf("%d, %d, %p
    "sizeof(float*), sizeof(pF), &pF);  
    18       
    19     return 0;  
    20

    5、传值调用与传址调用

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

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

      函数调用时实参值将复制到形参 

      指针适用于复杂数据类型作为参数的函数中

    6、编程实验

    利用指针交换变量     26-2.c

     1 #include <stdio.h>  
     2   
     3 int swap(int* a, int* b)  
     4 {  
     5     int c = *a;  
     6       
     7     *a = *b;  
     8       
     9     *b = c;  
    10 }  
    11   
    12 int main()  
    13 {  
    14     int aa = 1;  
    15     int bb = 2;  
    16       
    17     printf("aa = %d, bb = %d
    ", aa, bb);  
    18       
    19     swap(&aa, &bb);  
    20       
    21     printf("aa = %d, bb = %d
    ", aa, bb);  
    22       
    23     return 0;  
    24 }  

    7、常量与指针

    常量指针( p可变,p指向的内容不可变 )

                      - const int* p;   

                      - int const* p;     

    指针常量p不可变,p指向的内容可变 )

                      - int* const p;    

    *p与p均为常量

                      - const int* const p;     //p和p指向的内容都不可变 

    8、实例分析

    常量与指针     26-3.c

     1 #include <stdio.h>  
     2   
     3 int main()  
     4 {  
     5     int i = 0;  
     6       
     7     const int* p1 = &i;  
     8     int const* p2 = &i;  
     9     intconst p3 = &i;  
    10     const intconst p4 = &i;  
    11       
    12     *p1 = 1;    // compile error  
    13     p1 = NULL;  // ok  
    14       
    15     *p2 = 2;    // compile error  
    16     p2 = NULL;  // ok  
    17       
    18     *p3 = 3;    // ok  
    19     p3 = NULL;  // compile error  
    20       
    21     *p4 = 4;    // compile error  
    22     p4 = NULL;  // compile error  
    23       
    24     return 0;  
    25 }  

    9、小结

                指针是C语言中一种特别的变量 

                指针所保存的值是内存的地址 

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

  • 相关阅读:
    RSA
    DES
    MD5
    增删改查
    [转]数据绑定之DataFormatString
    分页通用存储过程(未验证)
    浅谈sql中的in与not in,exists与not exists的区别
    [转]order by 1是什么意思?
    bak骗子公司
    Performance Considerations for Entity Framework 4, 5, and 6
  • 原文地址:https://www.cnblogs.com/lemaden/p/10127872.html
Copyright © 2020-2023  润新知