• 指针、数组与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在函数内部是指针,而不是数组
    }
  • 相关阅读:
    Online Conversion Advanced Roman Numeral Converter
    如何对CentOS FTP服务配置 51CTO.COM
    [CPyUG][OT]为什么mysqlpython 2010年以后未见更新啊. maolingzhi@gmail.com Gmail
    专业的智能解析 WEB DDOS防御提供商
    深入了解scanf()/getchar()/gets()/getch,getche sunysl的专栏 博客频道 CSDN.NET
    they're hiring
    linux下绘图工具dia,功能强劲直逼visio 潜入技术的海洋 51CTO技术博客
    北京网通dns地址服务器大全 产品/方案 net.ChinaUnix.net
    北京光环新网科技股份有限公司 IDC,ISP,CDN,专线,托管,机房,数据中心,光纤接入
    lighttpd,thttpd,shttpd 轻量级WebServer介绍
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/11372923.html
Copyright © 2020-2023  润新知