关于指针的一些题目(1)数组中sizeof和strlen的使用

本文详细探讨了C语言中数组和指针在使用sizeof和strlen函数时的不同表现。通过示例代码,解释了sizeof运算符在计算数组总大小、元素大小及地址大小时的区别,以及strlen函数在计算字符串长度时的注意事项,包括非法访问和对结束符的依赖。
摘要由CSDN通过智能技术生成

#include<stdio.h>

#include<string.h>
int main()
{
    /*数组名是首元素的地址(除了下面两种情况除外)
        1:sizeof(数组名)——数组名表示整个数组
        2:&数组名——数组名表示整个数组*/

    int a[] = {1,2,3,4};
    printf("%d\n",sizeof(a));//表示计算数组总大小,16
    printf("%d\n",sizeof(a+0));//表示首元素地址,4/8
    printf("%d\n",sizeof(*a));//表示首元素的大小,4
    printf("%d\n",sizeof(a+1));//表示第二个元素的地址,4/8
    printf("%d\n",sizeof(a[1]));//表示第二个元素的大小,4
    printf("%d\n",sizeof(&a));//表示计算数组的地址,4/8
    printf("%d\n",sizeof(*&a));//表示计算数组总大小,16
    printf("%d\n",sizeof(&a+1));//表示计算数组下一个位置的地址,4/8
    printf("%d\n",sizeof(&a[0]));//表示计算第一个元素地址的大小,4/8
    printf("%d\n",sizeof(&a[0]+1));//表示计算第二个元素地址的大小,4/8

    char arr[] = {'a','b','c','d','e','f'};
    printf("%d\n", sizeof(arr));//表示计算数组总大小,6
    printf("%d\n", sizeof(arr+0));//表示计算数组第一个元素的地址大小,4/8
    printf("%d\n", sizeof(*arr));//表示计算数组第一个元素的大小,1
    printf("%d\n", sizeof(arr[1]));//表示计算数组第二个元素的大小,1
    printf("%d\n", sizeof(&arr));//表示计算数组的地址,4/8
    printf("%d\n", sizeof(&arr+1));//表示计算数组下一个位置的地址,4/8
    printf("%d\n", sizeof(&arr[0]+1));//表示计算数组第二个元素的地址大小,4/8

    printf("%d\n", strlen(arr));//随机数,直到数到’\0'为止
    printf("%d\n", strlen(arr+0));//随机数,直到数到’\0'为止,与上面相同
    printf("%d\n", strlen(*arr));//非法访问,相当于strlen(97)开始计算
    printf("%d\n", strlen(arr[1]));//非法访问,相当于strlen(98)开始计算
    printf("%d\n", strlen(&arr));//随机数,直到数到’\0'为止,与strlen(arr)相同
    printf("%d\n", strlen(&arr+1));//随机数,直到数到’\0'为止,与上面相差6
    printf("%d\n", strlen(&arr[0]+1));//随机数,直到数到’\0'为止,与strlen(arr)相差1
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值