sizeof()与strlen(char*)的一些差异

sizeof定义:C语言中判断数据类型或者表达式长度符;不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。
sizeof乃C/C++中的一个操作符(operator),简单的说其作

用就是返回一个对象或者类型所占的内存字节数。*注意是字节数。

sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );

3) sizeof object; // sizeof 对象;

strlen是计算机C语言函数,计算字符串s的(unsigned int型)长度,不包括'\0'在内。

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。而在C语言中没有字符串这个类型,所以一般系统在存储字符串(例如:a="abcdef"时会在末尾加上\0).


下面是一些sizeof()程序的验证:

#include<stdio.h>
#include<windows.h>

int main()
{
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };


	printf("%d\n", sizeof(a));//整个数组所占的字节长度
	printf("%d\n", sizeof(a+0));//数组第一个元素的地址长度
	printf("%d\n", sizeof(*a));//代表数组第一个元素的长度
	printf("%d\n", sizeof(a+1));//数组第二个元素地址的长度
	printf("%d\n", sizeof(a[1]));//代表数组第二个元素的长度
	printf("%d\n", sizeof(&a));//数组地址的大小
	printf("%d\n", sizeof(*&a));//整个数组所占的字节长度
	printf("%d\n", sizeof(&a[0]));//代表数组第一个元素的长度
	printf("%d\n", sizeof(&a+1));//下一个数组的地址  相当于加了整个数组的空间大小

	printf("%p\n", (&a + 1));
	printf("%p\n", &a);//与上一个数组地址相差了一个数组的大小

	printf("%d\n", sizeof(&a[0]+1));//第二个元素的地址

	system("pause");
	return  0;
}



如果是指针变量指向一个字符串时

#include<stdio.h>
#include<windows.h>

int main()
{

	char *p = "abcdef";
	printf("%d\n", sizeof(&*p));//指针变量p本身地址所占空间的大小,而不是p所指向内容的地址的大小。sizeof是运算符()也是运算符 你的printf打印的时候会先计算(p)的值 然后打印
	printf("%d\n", sizeof(p+1));//代表p所指向的字符串的第二个元素的地址大小
	printf("%d\n", sizeof(*p));//字符串第一个元素的大小
	printf("%d\n", sizeof(p[0]));//字符串第一个元素的大小
	printf("%d\n", sizeof(&p));//指针变量P所占内存的大小
	printf("%d\n", sizeof(&p+1));//指针p的内存地址的下一个内存地址的大小。
	printf("%d\n", sizeof(&p[0]+1));//第二个字符的地址

而sizeof在计算字符串长度时会把“\0” 的长度计算在内。

在多维数组中,在看待元素上会发生变化,而数组在内存中是以线性的方式存储的

strlen(char*)函数  (注意参数是char*类型)

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
	char a[] = "abcdef";
	printf("%d\n", sizeof(a));//计算\0
	printf("%d\n", strlen(a+0));//字符串的长度
	printf("%d\n", strlen(a));//字符串的长度
	printf("%d\n", strlen(&a));//字符串的长度
	printf("%d\n", strlen(&a+1));//下一个字符串的长度(也就是从字符串a的\0后开始计算到下一个\0的长度)
	printf("%d\n", strlen(&a[0]+1));//从字符串的第二个元素开始计算字符串的长度

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
	char *p= "abcdef";
	printf("%d\n", strlen(p));//字符串长度
	printf("%d\n", strlen(p+1));//从第二个字符算起到\0的字符串长度
	printf("%d\n", strlen(&p[0]+1));//从第二个字符算起到\0的字符串长度
	printf("%d\n", strlen(&p[0]));//从字符‘a’到\0的长度

这些只是其中的一些差异

欢迎指正,并添加!

猜你喜欢

转载自blog.csdn.net/jiangxiaobai1995/article/details/80009891