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语言关键字,作用域,生命周期,内存数据存储

 作用域:变量可被访问的有效范围。 生命周期:变量存储空间的有效生存时间。 extern int c;   通过关键字extern来告诉程序int c;是别的...

_数据存储—C语言中的文件

  • 2011年09月24日 13:37
  • 231KB
  • 下载

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

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

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

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

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

作者:冯老师,华清远见嵌入式学院讲师。 静态区是一个抽象笼统的概念,在实际的Linux/C的可执行程序中并没有静态区这个区域,具体来讲它主要由两个段组成:.data段和.bss段。其中.data...

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

二.静态区: 静态区是一个抽象笼统的概念,在实际的Linux/C的可执行程序中并没有静态区这个区域,具体来讲它主要由两个段组成:.data段和.bss段。其中.data段就是程序的数据段,在采用...
  • zyx6a
  • zyx6a
  • 2013年04月04日 19:42
  • 674

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

1.C语言的数据类型的分类:
  • whh4122
  • whh4122
  • 2014年09月11日 20:35
  • 361

C语言的数据存储

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

C语言浮点型数据存储结构

1.float类型 float类型占四个字节,每个字节占8位,总共32位,其内存结构如下图: 31位为符号位:0表示正数,1表示负数 31~23位:共8位表示指数位,内存存储数据从0~2^8-1...

关于数据存储大小端模式的C语言题目

int main() {     int a[5]={1,2,3,4,5};     int *ptr1=(int *)(&a+1);     int *ptr2=(int *)((int)a+1);...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言基础--指针和数据存储
举报原因:
原因补充:

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