CC++基础之 sizeof 与 strlen的讨论

    xiaoxiao2021-03-25  78

    ** sizeof接收的参数可以是数据类型,也可以是变量,得出的是该对象所占用内存空间的大小。特别地,如果是字面值常量,得到的是该字面值常量所占内存的大小

    ** 对于sizeof,要搞清楚对象到底是谁? 特别是指针变量与字符数组名的区别

    ** strlen接收的参数是const char*,该字符串库函数是专用来计算字符串中有效字符的个数(不包含'\0') ** sizeof 与 strlen:同一个字符数组名作为参数,sizeof计算的是其内存的大小,而strlen计算的是其有效字符的个数(遇到'\0'结束) 下面通过一个程序进行相关的测试,可以直接copy到C/C++相关IDE中编译运行,查看运行效果 int main() { char buf[] = "HelloWorld"; char *pBuf = buf; char ch = '\0'; int a1 = sizeof(buf);  //buf内存空间大小,空字符也占用一个字节内存空间 int a2 = strlen(buf);  //buf地址标记下的字符串中有效字符的个数,不包括'\0' int b1 = sizeof(pBuf);  //一个指针变量所占内存空间的大小,32位环境下,所有类型的指针变量均占4字节内存 int b2 = strlen(pBuf);  //指针pBuf所指向的字符串中有效字符的个数,不包括'\0' 此时,strlen(buf)等价strlen(pBuf) int c = sizeof(ch);  //一个普通的字符变量所占用内存空间的大小

    printf("sizeof("") = %d\n", sizeof(""));  //空串仍然占用一个字节

    printf("sizeof(abcd) = %d\n", sizeof("abcd"));  //常量字符串,占用5个字节

    printf("sizeof(buf) = %d\n", a1);   printf("strlen(buf) = %d\n", a2); printf("sizeof(pBuf) = %d\n", b1); printf("strlen(pBuf) = %d\n", b2);

    printf("sizeof(ch) = %d\n", c);

    /* //这里还可以打印出其他类型变量所占内存大小,便于你了解自己的编译器是如何对不同类型分配内存的,比如: printf("sizeof(int) = %d\n", sizeof(int)); printf("sizeof(long) = %d\n", sizeof(long)); printf("sizeof(float) = %d\n", sizeof(float)); printf("sizeof(double) = %d\n", sizeof(double)); ... */ return 0;

    }

    程序运行结果如下:

    以上程序相关测试数据,是在VS2013 IDE所得

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

    最新回复(0)