C语言基础--指针和数据存储

原创 2015年12月08日 16:05:38
数据的访问方式:
------------------------------------
  直接访问:直接访问内存单元中的内容
  间接访问:通过 内存单元编号 或者 数据所占字节点数 访问内存中的数据
         char        1             1个内存单元
         int         4个字节        4个内存单元
         short       2             2个内存单元
         long        48           48个内存单元
         float       4             4个内存单元                                                                                                                  double      8             8个内存单元
         %p可以将地址打印出来
---------------------------      
数据存储
   电脑内存:4G  8G  16G  1G = 1024M * 1024K * 1024B
   字节(byte):是最小的存储单元,一个字节被称为一个存储单元(内存单元),不同的数据类型所占的存储单元也不同
   位(bit):一个字节又可以划分为8
   为了正确访问内存单元,每个内存单元都有一个编号,内存单元的编号就是地址。
   内存地址 = 地址 = 内存单元标号
   内存单元中的数据才是我们关注的内容。 

   
指针
    指针是最常见的间接访问。
    指针就是内存地址,我们习惯把内存地址叫做指针,内存地址也可以简称为地址
     &取址符  可以查看一个变量的内存地址(内存首地址)
     格式化输出内存地址用%p  

        int a = 110;

        printf("a的内存地址:%p\n",&a);


   注意:
      &符号取出来的内存地址,只是变量的内存首地址,并不是变量只占这一个内存地址,变量的数据类型决定变        量占得几个内存地址。 
  ---------------------------
指针变量
      概念:存放内存地址的变量
              格式:基本数据类型 *变量名 = 内存地址;
  *取值操作符
     我们通过*来访问内存单元中的存储的值
     注意:*是取值操作符,  &是取址操作符

指针的重指向
     指针变量的赋值意味着重新指向,而不是同时指向多个地址
   如例

     int a =3, b = 5;

        int *p = &a;

        p = &b;

        printf("%p %p\n", &a, &b);

        printf("%p %d\n", p,  *p);

 


指针的类型
    定义指针类型要与取址变量的类型一致
指针变量所占的字节
    指针变量所占的字节大小取决于操作系统的位数,64位的系统,指针变量的大小为8;32位的是4.
    特别注意:
    指针变量的大小(所占字节)只与操作系统的位数有关
特别注意:
    1、如果出现*号的地方,前边有类型修饰符:int、float..,此时*号仅仅起到标示作用,即告诉编译器,这仅仅是一个指针变量
         2、 如果出现*号的地方,前边没有类型修饰符,此时*号代表取值操作符,会把指针指向的区域中的内容取出来
         3、 如果前边没有*号或者任何的类型修饰符。那这个变量就是一个指针变量,它里边存储着某一个内存地址。
//指针赋值
        C语言允许使用赋值运算符对指针进行赋值,前提是两个指针具有相同的数据类型。
传值和传址
    在传参过程中,形参会拷贝实参的值。


------------------------------------------
指针与数组
     
 C语言中,数组是构造类型,系统会分配一段连续 的内存空间,来存储数组的全部数据;
      
其中数组名代表数组首个元素的地址
      &array == &array[0];
恒等于;
      
指针变量parray相同,都指向数组的首地址(第一个元素的地址)
        
指针可以做为数组名使用
指针与数组的区别
      1、所占空间不同
            -指针:只与操作系统有关
            -数组:与元素个数和类型有关
      2、数组名是常量地址,不能被赋值不能重定向
      3、指针可以重定向
         
结构体指针变量指向的是结构体变量的首地址,也就是结构体第一个成员的地址。
结构体数组与指针的关系
     
 结构体数组的 数组名 是一个结构体 指针 常量






版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言判断数据存储时大端模式还是小端模式

C语言判断数据存储时大端模式还是小端模式 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中; 所谓的小端模式,是指数据的低位保存在内存的低地址...

C语言 数据存储类型分析

变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种。 内存中。具体点来说内存分为三...

浅谈C语言的数据存储(一)

程序由指令和数据组成,C语言程序亦是如此。开发者在编写程序的时候往往需要根据不同数据的特点以及程序需求来选择不同的数据存储方式,那么在C语言中数据的存储分为哪些方式呢? C程序大致来讲可以分为四个数据...

浅谈C语言的数据存储(一)

作者:冯老师,华清远见嵌入式学院讲师。 程序由指令和数据组成,C语言程序亦是如此。开发者在编写程序的时候往往需要根据不同数据的特点以及程序需求来选择不同的数据存储方式,那么在C语言中数据的存储分为哪...

单链表数据存储结构(c语言实现)

1.list.h # ifndef _LIST_H # define _LIST_H typedef struct _node {  void * data;  struct _node ...

C语言数据存储与输入输出

1.C语言的数据类型的分类:

C语言的数据存储

一、划分    1、代码区:​存放编译后可执行代码的区域。    2、静态存储区:存在着静态变量(static修饰的变量,如:static int a)​以及全局变量。全局变量和静态变量在...

浅谈C语言的数据存储(二)

浅谈C语言的数据存储(二) 静态区是一个抽象笼统的概念,在实际的Linux/C的可执行程序中并没有静态区这个区域,具体来讲它主要由两个段组成:.data段和.bss段。其中.data段就是程序的数据段...

浅谈C语言数据存储(二)

二.静态区: 静态区是一个抽象笼统的概念,在实际的Linux/C的可执行程序中并没有静态区这个区域,具体来讲它主要由两个段组成:.data段和.bss段。其中.data段就是程序的数据段,在采用...
  • zyx6a
  • zyx6a
  • 2013-04-04 19:42
  • 635
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)