zoukankan      html  css  js  c++  java
  • C语言关于指针的注意事项

    一、指针的四个关键概念
    1、指针的类型
    2、指针指向的类型
    3、指针的值,也就是指针指向的地址
    4、指针自己所占用的内存空间
    注意:指针变量所存的内容就是内存的地址编号!

    例如:
    int **pp = NULL;
    1、指针的类型是 int **
    2、指针指向的类型 int *
    3、指针的值为NULL
    4、指针自己所站内存的大小  sizeof(pp)

    二、强制类型转换
    强制类型不会改变内存中二进制的排列与顺序,只会将二进制按照目标类型解释。
    例如:
    int i = 10;
    二进制位 0110;
    float f = (float)i;
    变量f的二进制还是 0110

    三、关于CONST修饰变量
    看const修饰变量的时候,完全可以将数据类型名视而不见
    例如
    int const *p;  //修饰*p , p可以变 , *p不能够变
    const int *p;  //修饰*p , p可以变 , *p不能够变
    const int * const p; //修饰p和*p , p不可变, *p也不可变

    四、关于变量类型
    1、数据类型的本质是固定内存空间大小的别名
    2、变量的本质是一段连续内存空间起始地址的别名

    五、关于变量声明的意义
    1、建立变量符号表
    通过声明变量,编译器可以建立变量符号表,如此一来,程序中用到了多少变量,每个变量的类型是什么,编译器非常清楚,是否使用了没有声明的变量,编译器在编译期间就可以发现。从而帮助开发人员远离由于疏忽而将变量名写错的情况
    2、变量的数据类型指示系统为变量分配多少内存空间
    3、变量的数据类型指示了系统如何解释存储空间中的值,同样的数值,不同的类型将有不同的解释。int占据4个字节,float也占据4个字节,在内存中同样是存储的二进制数,并且这个二进制数也没有标志区分当前是int型还是float型。如何区分?就是通过变量的数据类型来区分。由于声明建立了变量符号表,所以系统知道变量该如何解释
    4、变量的数据类型确定了该变量的取值范围
    例如短整型数据取值-32767~32767之间
    5、不同的数据类型有不同的操作
    如整数可以求余。C语言用符号”%”表示求余。整数可以,实数不可

    六、关于函数调用传递指针的总结
    1、如果在被调函数中想修改主调函数中变量的值,则需要将主调函数中的变量的地址(指针)传递到被调函数中
    2、如果主调函数要传递一个超大的数据到被调函数中时,也可以将主调函数的变量的地址(指针)传递到被调函数中,这样有利于提高程序的性能
    3、传递N级指针是为了修改N-1级指针的值,
         例如 : int *p;如果需要修改p的值,则需要将&p传递到函数中,才能修改p的值

    七、关于指针与数组互换的问题
    在表达式中,指针和数组是可以互换的,因为他们在编译器里面的最终形式都是指针,并且都可以进行取下标操作

    八、数组与指针的区别
    数组: 一个数组就是一个地址,并且该地址是一个常量值,不能改变。因此,数组名不能作为左值。
    指针: 一个指针就是一个地址的地址 , 并且该地址是可以改变的。也就可以作为左值。

    九、指针与地址的区别
    指针就是地址,但地址并不是指针。指针有类型,地址没有类型。

    十、传值与传址的区别
    c语言其实只有一种传值方式,就是按值传递
    按值、按址传递的区别在于,在函数中使用的方式而已。如果在函数中是要修改地址所指向内存的值,则可以修改实参地址指向的内容。因为在内存中内存地址是唯一的,所以不论在什么地方,都可以通过地址来修改内存中的值


    指针变量总结

  • 相关阅读:
    yum -y list java* 查看当前java的版本
    max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
    max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
    max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
    linux文件描述符open file descriptors与open files的区别
    samba 报错
    检测端口是否开启
    sqlserver2008出现数据库主体在该数据库中拥有架构,无法删除的解决方案
    sqlserver生成表结构文档的方法
    胡萝卜周博客 软件下载
  • 原文地址:https://www.cnblogs.com/britton/p/6373751.html
Copyright © 2011-2022 走看看