sizeof

来源:互联网 发布:证大财富淘宝贷假不假 编辑:程序博客网 时间:2024/04/30 11:20


/********************************************************************************* *      Copyright:  (C) 2015 songyong<handy_skyoutlook.com> *                  All rights reserved. * *       Filename:  array.c *    Description:  This file  *                  *        Version:  1.0.0(2015年09月11日) *         Author:  sky <handy_sky@outlook.com> *      ChangeLog:  1, Release initial version on "2015年09月11日 13时56分59秒" *                  ********************************************************************************/#include<stdio.h>#include<stdlib.h>/******************************************************************************** *  Description: *   Input Args: *  Output Args: * Return Value: ********************************************************************************/int main (int argc, char **argv){    struct {        short a1;        short a2;        short a3;    }A;    struct {        int      a1;        char     a2[3];        short    a3;    }B;    struct {        int      a1;        char     a2[2];        short    a3;    }C;    char *ss1 = "0123";    char ss2[] = "0123";    char ss3[100] = "0123";    int  ss4[100] ;    char q1[] = "abc";    char q2[] = "a\n";    char * q3 = "a\n";    char *str1 = (char *)malloc(100);    void *str2 = (void *)malloc(100);    printf("*ss1 :%d\n",sizeof(ss1));    printf("ss2[] :%d\n",sizeof(ss2));    printf("ss3[100] :%d\n",sizeof(ss3));    printf("ss4 :%d\n",sizeof(ss4));    printf("q1[] :%d\n",sizeof(q1));    printf("q2[] :%d\n",sizeof(q2));    printf("*q3 :%d\n",sizeof(q3));    printf("*str1 :%d\n",sizeof(str1));    printf("*str2 :%d\n",sizeof(str2));    printf("A:%d\n",sizeof(A));    printf("B:%d\n",sizeof(B));    printf("C:%d\n",sizeof(C));    return 0;} /* ----- End of main() ----- */


在默认情况下,为了方便对结构体内元素的访问和管理,当结构体内的元素的长度都小于处理器的位数的时候,便以结构体里面最长的数据元素为对齐单位,也就是说,结构体的长度一定是最长的数据元素的整数倍。如果结构体内存在长度大鱼处理器位数的袁术,那么就以处理器位数为对齐单位。但是结构体内类型相同的连续元素将在连续的空间内,和数组一样。

另外:

sizeof (ss1) 结果为4,ss1是指向字符串常量的字符指针。

sizeof (*ss1) 结果为1,*ss1是第一个字符;

sizeof (ss3) 结果为100,ss3表示在内存中预分配的大小。

strlen (ss3) 结果为10计算的是字符串的长度,遇到‘\0‘即停止。

sizeof (ss4) 结果为400,ss4表示在内存中的大小,

strlen (ss4) 出错stelen参数必须是char * 类型,且必须是以‘\0’结尾的。

0 0
原创粉丝点击