[c语言]——sizeof & strlen计算笔试题

1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
3. 除此之外所有的数组名都表示首元素的地址。
**

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int a[]={1,2,3,4};
	printf("%d ",sizeof(a));//16//求整个数组的大小
	printf("%d ",sizeof(a+0));//4//等价于a[0]
	printf("%d ",sizeof(*a));//4//首元素地址解引用
	printf("%d ",sizeof(a+1));//4//指针
	printf("%d ",sizeof(a[1]));//4//第二个元素
	printf("%d ",sizeof(&a));//4//数组的地址也是指针
	printf("%d ",sizeof(*&a));//16//数组的地址解引用
	printf("%d ",sizeof(&a+1));//4//指针
	printf("%d ",sizeof(&a[0]));//4//指针
	printf("%d ",sizeof(&a[0]+1));//4//指针


	char arr[] = {'a','b','c','d','e','f'};//未定义数组的大小
    printf("%d\n", sizeof(arr));//6//数组中6个字符
    printf("%d\n", sizeof(arr+0));//4//指针
    printf("%d\n", sizeof(*arr));//1//解引用第一个元素的大小
    printf("%d\n", sizeof(arr[1]));//1
    printf("%d\n", sizeof(&arr));//4//数组的地址
	printf("%d\n",sizeof(&arr+1));//4//跳过一个数组的元素
	printf("%d\n", sizeof(&arr[0]+1));//4//数组第二个元素的地址

    printf("%d\n", strlen(arr));//x//不知道\0的位置在哪里
    printf("%d\n", strlen(arr+0));//x//同上
    printf("%d\n", strlen(*arr));//err//strlen需要传过去的是地址
    printf("%d\n", strlen(arr[1]));//err
    printf("%d\n", strlen(&arr));//x//同理不知道\0的位置
    printf("%d\n", strlen(&arr+1));//x-5//跳过了一个数组但是不知道\0的位置
    printf("%d\n", strlen(&arr[0]+1));//x-1//同理


	char arr[] = "abcdef";
	printf("%d\n", sizeof(arr));//7//字符串会求出包含\0的长度
    printf("%d\n", sizeof(arr+0));//4//指针
    printf("%d\n", sizeof(*arr));//1//第一个字符的大小
    printf("%d\n", sizeof(arr[1]));//1//同理
    printf("%d\n", sizeof(&arr));//4//首元素地址
    printf("%d\n", sizeof(&arr+1));//4
    printf("%d\n", sizeof(&arr[0]+1));//4

    printf("%d\n", strlen(arr));//6//到\0停下
    printf("%d\n", strlen(arr+0));//6//同理
    printf("%d\n", strlen(*arr));//err//需要传过去地址
    printf("%d\n", strlen(arr[1]));//err
    printf("%d\n", strlen(&arr));//6//首元素地址
	printf("%d\n", strlen(&arr+1));//x//跳过了这个数组
	printf("%d\n", strlen(&arr[0]+1));//5//从第二个开始数

	char *p = "abcdef";
    printf("%d\n", sizeof(p));//4//首字符地址
    printf("%d\n", sizeof(p+1));//4//第二个字符的地址
    printf("%d\n", sizeof(*p));//1//第一个字符的实际大小
    printf("%d\n", sizeof(p[0]));//1//同上
    printf("%d\n", sizeof(&p));//4//二级指针
    printf("%d\n", sizeof(&p+1));//4
    printf("%d\n", sizeof(&p[0]+1));//4

	printf("%d\n", strlen(p));//6//数这个字符串的长度
    printf("%d\n", strlen(p+1));//5
    //printf("%d\n", strlen(*p));//err
    //printf("%d\n", strlen(p[0]));//err
    printf("%d\n", strlen(&p));//x//二级指针的\0不确定
    printf("%d\n", strlen(&p+1));//y
    printf("%d\n", strlen(&p[0]+1));//5//从第二个字符开始数

	int a[3][4] = {0};
	printf("&d\n",sizeof(a));//48//数这个二位数组的大小
	printf("%d\n",sizeof(a[0][0]));//4//第一个数字的大小
    printf("%d\n",sizeof(a[0]));//16//第一行的数组的大小
    printf("%d\n",sizeof(a[0]+1));//4//第一行第二个数字的地址
    printf("%d\n",sizeof(*(a[0]+1)));//4//第一行第二个数字的大小
    printf("%d\n",sizeof(a+1));//4//第二行的地址
    printf("%d\n",sizeof(*(a+1)));//16//第二行的大小
	printf("%d\n",sizeof(&a[0]+1));//4//第二行的地址
    printf("%d\n",sizeof(*(&a[0]+1)));//16//第二行元素的大小
    printf("%d\n",sizeof(*a));//16//第一行的大小
    printf("%d\n",sizeof(a[3]));//16//虽然越界了但是sizeof只是一个关键字他不关心这块空间是否真的存在

	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值