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在函数内部是指针,而不是数组
    }
  • 相关阅读:
    wireshark安装
    高效使用搜索引擎
    MFC 网络编程 -- 总结
    MFC Grid control 2.27
    A Popup Progress Window
    Showing progress bar in a status bar pane
    Progress Control with Text
    Report List Controls
    第三方
    CBarChart柱形图类
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/11372923.html
Copyright © 2011-2022 走看看