有关数组的运算

1    定义一个一维整型数组   int a[ ]={1,2,3,4}  

printf("%d\n",sizeof(a))     输出为16    //数组名单独放在sizeof内,求取的是整个数组的大小

printf("%d\n",sizeof(*a))               4    //a代表首元素的地址,对a解引用,就是首元素的大小

printf("%d\n",sizeof(a+0))            4    //a+0代表数组首元素,这里求的是首元素的大小

printf("%d\n",sizeof(a+1))            4    //a+1代表数组的第二个元素

printf("%d\n",sizeof(a[1]))            4    //a[1]代表数组的第二个元素

printf("%d\n",sizeof(&a))              4    //&a指整个数组的地址,一个地址的大小为4个字节

printf("%d\n",sizeof(&a+1))          4    //&a+1指数组外面的地址,仍是4个字节

printf("%d\n",sizeof(&a[0]))          4    //&a[0]代表数组首元素的地址,为4个字节

printf("%d\n",sizeof(&a[0]+1))      4    //&a[0]+1代表数组第二个元素的地址,为4个字节

printf("%d\n",sizeof(*&a))             4    //&a指整个数组的地址,解引用之后求的是整个数组的大小


2  定义一个字符数组   char arr[ ]={a,b,c,d,e,f} 

printf("%d\n",sizeof(arr))             6   //求取整个数组的大小

printf("%d\n",sizeof(arr+0))         4   //求取数组首元素的地址的大小

printf("%d\n",sizeof(*arr))            1   //arr代表首元素的地址,*a指首元素a的大小

printf("%d\n",sizeof(arr[1]))         1   //arr[1]代表数组的第二个元素,它的大小为一个字节

printf("%d\n",sizeof(&arr))          4    //&rr指整个数组的地址,其大小为4个字节

printf("%d\n",sizeof(&arr+1))      4    //数组外面的地址,仍是4个字节

printf("%d\n",sizeof(&arr[0]+1))   4   //数组第二个元素的地址,大小为4个字节

用strlen求取字符数组的大小

首先说明一点,strlen在求取字符串长度的时候遇到\0就停止统计

printf("%d\n",strlen(arr))       随机值    //该字符数组没有\0,所以该数组的大小不能确定

printf("%d\n",strlen(arr+0))   这个值和上面的值一样,因为它们都是从数组的首元素开始查找

printf("%d\n",strlen(*arr))     error //*arr代表字符'a',访问strlen('a')的方法是无效的

printf("%d\n",strlen(arr[1]))  error //arr[1]代表字符'b',访问strlen('b')的方法是无效的

printf("%d\n",strlen(&arr))          随机值    

printf("%d\n",strlen(&arr+1))      随机值  //&arr+1跳到数组外面,strlen从数组的外面开始统计字符的个数

printf("%d\n",strlen(&arr[0]+1))   随机值 //strlen从数组的第二个元素开始统计字符的个数

 3  定义一个字符指针数组    char *p="abcdef"

首先 char *p="abcdef"表示把字符a的地址存到指针变量p中

printf("%d\n",sizeof(p))            4  //p是一个指针变量,大小为4个字节

printf("%d\n",sizeof(p+1))        4  //(p+1)中存放的是字符b的地址,是用一个指针变量存放的,大小为4个字节

printf("%d\n",sizeof(*p))           1 //*p表示字符a的大小,为1个字节

printf("%d\n",sizeof(p[0]))         1  //求的是数组首元素a的大小

printf("%d\n",sizeof(&p))           4  //指整个数组的地址,其大小为4个字节

printf("%d\n",sizeof(&p+1))       4  //数组外的一个地址的大小

printf("%d\n",sizeof(&p[0]+1))   4 //数组第二个元素的地址的大小

 用strlen求取字符数组的大小

printf("%d\n",strlen(p))           6//f后面的字符是\0

printf("%d\n",strlen(p+1))      5//从字符b开始统计

printf("%d\n",strlen(*p))         error//不能访问strlen('a')

printf("%d\n",strlen(p[0]))      error//同上

printf("%d\n",strlen(&p))       随机值//&p代表取字符a的地址的地址,不知道\0的位置

printf("%d\n",strlen(&p+1))   随机值//同上

printf("%d\n",strlen(&p[0]+1))   5//从字符b开始统计,遇到f后面的\0停止

4  定义一个二维数组  int a[3][4]={0}

printf("%d\n", sizeof(a));    //48  a表示整个数组,大小为12*4=48个字节

printf("%d\n", sizeof(a[0][0])); //4 a[0][0]表示数组第一个元素,大小为4个字节

printf("%d\n", sizeof(a[0]));    //16 a[0]表示数组第一行元素,大小为4*4=16个字节

printf("%d\n", sizeof(a[0] + 1)); //4 a[0]表示a[0][0]的地址,a[0]+1表示a[0][1]的地址

printf("%d\n", sizeof(a + 1));    //4  a表示首元素的地址,a+1表示第二行第一个元素的地址

printf("%d\n", sizeof(&a[0] + 1));  //4 &a[0] + 1表示取第二行的地址

printf("%d\n", sizeof(*a));      //16   *a表示第一行的元素的大小,4*4=16个字节

printf("%d\n", sizeof(a[3]));   //16     sizeof内部的表达式不参与运算,a[3]代表数组第四行的元素的大小,4*4=16个字节

在对数组进行运算时,对指针解引用,取决于指针的类型


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值