数组、字符串的大小

首先,先看这样一段程序:

#include <stdio.h>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,0};
printf("%p\n", arr);
printf("%d\n", *arr);
return 0;
}

运行的结果:
这里写图片描述
这里,printf(“%p\n”, arr),指的是打印数组arr的首元素arr[0]的地址,为00D5F14;printf(“%d\n”, *arr),指的是打印指向数组arr的首元素arr[0]的内容。
通过以上,下面说一下有关数组的一些运算:

//整型一维数组
#include<stdio.h>
int main()
{   
    int a[] = {1,2,3,4};
    printf("%d\n",sizeof(a));      
    //16   sizeof(数组名)指的是一个int整型所占内存大小。
    printf("%d\n",sizeof(a+0));    
    //4    sizeof(数组名+偏移量)指数组的首元素a[0]偏移0位后的内存大小
    printf("%d\n",sizeof(*a));     
    //4    sizeof(指针+数组名)指数组首元素的地址的大小
    printf("%d\n",sizeof(a+1));    
    //4    sizeof(指针+数组名+偏移量)指数组a[1]的地址的大小
    printf("%d\n",sizeof(a[1]));   
    //4    sizeof(数组[])指数组中某一元素所占内存大小
    printf("%d\n",sizeof(&a));     
    //4    sizeof(&数组名)指数组首元素a[0]地址的大小,仅仅int型地址
    printf("%d\n",sizeof(&a+1));   
    //4    sizeof(&数组名+偏移量)指数组最后元素加偏移量,即数组之外的地址的大小,
    printf("%d\n",sizeof(&a[0]));  
    //4    sizeof(&数组[])指数组某个元素的地址的大小 
    printf("%d\n",sizeof(&a[0]+1));
    //4    sizeof(&数组[]+偏移量)指数组某个元素的地址加偏移量的大小
    return 0;
}
//#include<stdio.h>
//int main()
//{
//  int arr[] = {1,2,3,4,5,6,7,8,9,0};
//  printf("%p\n", arr);
//  printf("%d\n", *arr);//这里输出什么?
//  return 0;
//}

////整型一维数组
//#include<stdio.h>
//int main()
//{ 
//  int a[] = {1,2,3,4};
//  printf("%d\n",sizeof(a));      //16   sizeof(数组名)指的是一个int整型所占内存大小。
//  printf("%d\n",sizeof(a+0));    //4    sizeof(数组名+偏移量)指数组的首元素a[0]偏移0位后的内存大小
//  printf("%d\n",sizeof(*a));     //4    sizeof(指针+数组名)指数组首元素的大小
//  printf("%d\n",sizeof(a+1));    //4    sizeof(指针+数组名+偏移量)指数组a[1]的地址的大小
//  printf("%d\n",sizeof(a[1]));   //4    sizeof(数组[])指数组中某一元素所占内存大小
//  printf("%d\n",sizeof(&a));     //4    sizeof(&数组名)指数组首元素a[0]地址的大小,仅仅int型地址
//  printf("%d\n",sizeof(&a+1));   //4    sizeof(&数组名+偏移量)指数组最后元素加偏移量,即数组之外的地址的大小,
//  printf("%d\n",sizeof(&a[0]));  //4    sizeof(&数组[])指数组某个元素的地址的大小 
//  printf("%d\n",sizeof(&a[0]+1));//4    sizeof(&数组[]+偏移量)指数组某个元素的地址加偏移量的大小
//  return 0;
//}

//char字符数组
#include<stdio.h>
#include<string.h>
int main()
{
    char arr[] = {'a','b','c','d','e','f'};
    printf("%d\n", sizeof(arr));      //6   char型数组的大小6个元素
    printf("%d\n", sizeof(arr+0));    //4   指数组的首元素a[0]偏移0位后的内存大小
    printf("%d\n", sizeof(*arr));     //1   指向一个char型首元素arr[0]大小
    printf("%d\n", sizeof(arr[1]));   //1   数组arr[1]所占内存的大小
    printf("%d\n", sizeof(&arr));     //4   数组arr地址的大小
    printf("%d\n", sizeof(&arr+1));   //4   数组arr之外的地址的大小
    printf("%d\n", sizeof(&arr[0]+1));//4   数组首元素arr[0]的地址加1的大小

    printf("%d\n", strlen(arr));      //x   在strlen语句,要在数组找到\0才停下来,随机值
    printf("%d\n", strlen(arr+0));    //x   在strlen语句,要在数组找到\0才停下来,随机值
    printf("%d\n", strlen(*arr));   //error arr[0]='a',ASCII码97,strlen(97)
    printf("%d\n", strlen(arr[1]));  //error arr[1]='b',ASCII码98,strlen(98)
    printf("%d\n", strlen(&arr));      //x   arr[0],要在数组找到\0才停下来,随机值
    printf("%d\n", strlen(&arr+1));    //x   数组外,要在数组找到\0才停下来,随机值
    printf("%d\n", strlen(&arr[0]+1));  //x   arr[0]地址加1 ,要在数组找到\0才停下来,随机值
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值