zoukankan      html  css  js  c++  java
  • 指针、数组与sizeof运算符

    1、sizeof是C语言的一个运算符(主要sizeof不是函数,虽然用法很像函数),sizeof的作用是用来返回()里边
    的变量或者数据类型占用的内存字节数。
    2、sizeof存在的价值:
    主要是因为在不同平台下各种数据类型所占的内存字节数不尽相同(譬如int在32位系统上为4字节,在16位系统上
    为2字节)。所以程序中需要使用sizeof来判断当前变量/数据类型在当前环境下占几个字节。
    3、举例说明:
    例子1:char str[] = "hello";
    sizeof(str)    //元素所占的字节数,也就是数组的大小   占6个字节
    sizeof(str[0]) //第0个元素,第0个元素是char型的,所以 占1个字节
    sizeof(str)    //字符串的长度(不包含最后的),     占5个字节
    例子2:char str[] = "hello";  char *p = str;//str做右值,相当于首元素的首地址,数组的元素是char型,
                                                //那么str就是char *,刚好匹配
    sizeof(p)      //p本身是一个指针变量,跟p指向的变量一点关系没有;只是一个char *指针的长度,
                   //32位系统上所有的指针的长度都是4
    sizeof(*p)     //p所指向的变量,p所指向的变量是char型的,相当于sizeof(char)   自然是1
    strlen(p)      //相当于strlen(str)     5
    例子3:
    int b1[100] = {0};
    printf("sizeof(b1) = %d. ",sizeof(b1));           //400   100*sizeof(int)
    short b2[100] = {};
    printf("sizeof(b2) = %d. ",sizeof(b2));           //200   100*sizeof(short)
    double b3[100];
    printf("sizeof(b3) = %d. ",sizeof(b3));           //800   100*sizeof(double)
    4、
     #define  dpChar  char *
     typedef  char * tpChar;
     dpChar p1, p2;//展开:char *p1,p2; 相当于char *p1,char p2;  所以sizeof(p1)为4,sizeof(p2)为1
     tpChar p3, p4;//相当于char *p3,char *p4;   所以sizeof(p3)为4,sizeof(p4)为4  
    5、
    (1)函数传参,形参是可以传数组的
    (2)函数形参是数组时,实际传递的不是整个数组,而是数组的首元素首地址。也就是说函数传参用数组来传,
         实际相当于传递的时指针(指针指向数组的首元素首地址),所以下边的结果是4,而不是80
    void func(int a[])//func完全等同于func1
    {
     printf("数组大小 = %d. ",sizeof(a));
    }
    void func1(int *a)
    {
     printf("数组大小 = %d. ",sizeof(a));
    }
    int main(void)
    {
     int a[20];
     func(a);   //打印出来的结果是4,因为a在函数内部是指针,而不是数组
    }
  • 相关阅读:
    在Centos 7下编译openwrt+njit-client
    开博随笔
    Chapter 6. Statements
    Chapter 4. Arrays and Pointers
    Chapter 3. Library Types
    Chapter 2.  Variables and Basic Types
    关于stm32不常用的中断,如何添加, 比如timer10 timer11等
    keil 报错 expected an identifier
    案例分析 串口的地不要接到电源上 会烧掉
    案例分析 CAN OPEN 调试记录 进度
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/11372923.html
Copyright © 2011-2022 走看看