计算数组的长度和,求数组的第二大的数

求数组的第二大的数

#include <stdio.h>

int main () {

 int data[]={2,4,6,3,8,9,7,1,0,};

 int i=0;

 int len=0;

 int max=0,sec=0; 

 len=sizeof(data)/sizeof(data[0]); //数组占内存总空间,除以单个元素占内存空间大小

 //while(scanf("%d",&data[i+len]!=EOF)) len++;这种为什么不行

 for (i=0;i<len;i++)

 {

  if(data[i]>max)

  {

   sec=max;

   max=data[i];  

  }

  else if (data[i]>sec)

  {

   sec=data[i];

  }

 }

 printf("%d\n",len);

 printf("%d\n",sec);

 return 0;

}

2,计算数组的长度

 

见的数组就是字符数组和整型数组

.sizeof函数

 这个函数可以求得这两种类型的数组的长度。

sizeof(...)是操作符,其定义为:typedef unsigned int size_t;

其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。

它的功能是:获得返回一个对象或者类型所占的内存字节数

由于在编译时计算, sizeof不能用来返回动态分配的内存空间的大小。所以,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,其返回值跟对象、结构、数组所存储的内容没有关系。

有两点需要注意。

1. 通过上述方式求得字符数组的长度总是比我们想得到的多了一,是因为字符数组在最后一位默认有一个\0的空字符,

 所以比我们想象中的大了一,还要说的是\0 的作用就是标记结束,当我们使用printf 或者是puts 函数将字符数据进行输出

的时候,就是通过末位的\0来标记结束的, 如果没有\0 的话,输出结果的末尾会是乱码,所以在声明数组的时候我们需要

将数组的大小声明比我们需要的大一位, 我们使用scanf或者是gets 函数它们会默认在最后一位填上\0

  2. 上述的这个方法不适用与将数组传到函数中,在函数中使用此方法求数组的长度,结果是错误的。

数组作为参数传递时,相当于一个指针,因此sizef(arr)实际求的是指针的长度,这是个固定值。Windows64位系统,一个指针占4个字节;Linux64 位系统,一个指针占8个字节,就这点差别。这应该是8个字节把,用其除以int所占的字节数(4), 结果就是2 .

这什么区别(自己问)

二、strlen

strlen作为函数,其参数必须是字符型指针(*char),且必须以‘\0‘ 结尾。否则会一直找,最后输出随机值。

strlen函数只适用于求字符数组的长度,而且他返回的是第一个\0之前的字符长度,不需要考虑\0

另外使用strlen函数需要引入string.h头文件

strlen中,数组名和 &数组名 均代表首元素的地址。&数组名加上其他操作符代表整个数组的地址。

*数组名)代表指针解引用,为首元素内容。

应用:注意,字符类型大小为1个字节。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值