• #运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标VS指针


    #运算符:用于在预编译期将宏参数转换为字符串

    #define CONVERS(x)  #x   //注:没用双引号包括。

    不同类型的指针占用的内存空间大小相同。

    局部变量 定义:

    a[5];

    打印a[i]时,a[i]为随机数。

    若定义a[5]={1,2};

    打印时,a[0]=1;a[1]=2;a[2]=a[3]=a[4]=0;

    数组地址与数组名:

    1.数组名代表数组首元素的地址。  a=&a[0];

    2.数组的地址需要用取地址符号&才能得到 (&a)

    3.数组首元素的地址值与数组的地址值相同。

    4.数组首元素的地址与数组的地址是两个不同的概念。

    a+1:(unsigned int)a+sizeof(*a)//加上一个元素大小。

    &a+1:(unsigned int)(&a)+sizeof(*&a)//加上整个数组大小。

    指针和数组

    编译器对数组和指针处理不同。

    处理指针:一次寻址操作。

    char *p=“HW”

    访问p时->先找到内存空间->再从内存空间取得地址->根据地址找到HW。(做了一次寻址操作)

    处理数组:无寻址,直接去访问。

    char p[] = "HW"

    指针的运算:与整数的运算规则为

    P+n:(unsigned int)p+n*sizeof(*p);

    指针之间的减法:注此指针必须类型相同

    P1-P2:((unsigned int)p1-(unsigned int)p2)/sizeof(type);

    结论:

    1.当指针P指向一个同类的数组的元素时:

    P+1:将指向下一个元素。

    P-1:将指向上一个元素。

    2.当2个指针指向同一个数组中的元素时,指针相减才有意义,为指针所指向元素的下标差。

    堆区:申请的内存空间 heap。

    栈区:局部变量  stack

    静态区:静态变量,全局变量空间。

    只读区:分配常量和程序代码空间

    在main.cpp
    
    int a=0; //全局初始化区
    char *p1;//全局未初始化区
    main()
    {
          int b;//栈区
          char s[] = "abc";//栈区
          char *p2; //栈区
          char *p3 = "123456";123456在常量区,P3在栈区
          static int c = 0;全局(静态)初始化区
         P1=(char*)malloc(10); //
        
    }

    求一个数组中元素的个数:

    DIM(a) = sizeof(a)/sizeof(*a);

    下标VS指针:

    1.从理论上而言,当指针以固定增量在数组中移动时,其效率高于下标产生的代码(下标时,乘法很耗时)。

    2.当指针增量为1且硬件具有硬件增量模型时,表现更佳。

  • 相关阅读:
    2019年11月体重管理进展
    云锵投资 2019 年 11 月简报
    2019年10月体重管理进展
    云锵投资 2019 年 10 月简报
    2019年9月体重管理进展
    云锵投资 2019 年 09 月简报
    2019年8月体重管理进展
    云锵投资 2019 年 08 月简报
    分布式系统发展史
    2019年7月体重管理进展
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/7527424.html
Copyright © 2020-2023  润新知