c的基础问题

    xiaoxiao2021-03-26  12

    1.首先就是sizeof和strlen的问题:

    sizeof的数据类型是:size_t 返回数据的格式是:%lu

    strlen的数据类型是:int 返回数据类型格式是:%d

    strlen是个函数

    sizeof 可以用类型做参数,strlen 只能用 char* 做参数,且必须是以 '\0' 结尾的。此外,sizeof 还可以用函数做参数代码如下:

    #include <stdio.h> #include <string.h> int main(){ size_t m; m = sizeof("hello world"); int i; i = strlen("hello world"); printf("size:%zu\nstrlen:%d\n", m, i); return 0; }

    输出:size:12

    strlen:11

    所以sizeof计算的结果包括'\0', 而strlen是不包括的。

    2.现在就得讲讲类型所定义的大小是问题了:

    struct { int a; short b; double c; }A; sizeof(A)等于多少? int占4字节 short 占2字节 double占8字节 所以总共是14字节,但保存的时候会采取字节对齐的方式,所以sizeof(A)=16; struct { char *p; int a[3]; float b; }B;在linux系统中 指针变量是占8个字节(这个跟操作系统是有关系的,在32位操作系统内是4个字节) 变量B.a占 4*3=12个字节 B.b占4个字节 所以总共是24个字节 采用字节对齐方式, sizeof(B)=32; char var[10]; int func(char var[]){ return sizeof(var) } 结果为:4 var[] 等价于 *var ,当数组名以形参传递给函数时,已经退化为一个指针。

    void *func(void){ return NULL; }sizeof(func)=8(这个跟操作系统是有关系的,在32位操作系统内是4个字节)。

    转载请注明原文地址: https://ju.6miu.com/read-500289.html

    最新回复(0)