C语言的sizeof
今天帮同学想用C实现数组的折半查找,本来算法挺简单的,可是折腾了好几个小时才发现问题在哪,这个sizeof坑人不浅啊。
#include<stdio.h>
void m(int []);
int main(){
int a[]={,,,,,,,,};
printf("%d\n",sizeof(a));
m(a); return ;
} void m(int k[]){
printf("%d\n",sizeof(k)); } 上面第5行的结果是36,第12行的结果是4,为啥同一个数组怎么结果不一样呢?原因就是发生在sizeof这里。那是因为sizeof是一个操作符,误认为是一个函数,还有就是数组在传递的过程中已经失去其原有的本义,在m函数中其实际上是传递的一个数组指针,所以第12行实际上是测试的指针的大小。
明白这里了,附上一篇C实现折半的代码
#include<stdio.h>
int binearySearch(int[],int,int);
int main(){
int a[]={,,,,,,,,};
int m=;
int length=sizeof(a)/sizeof(int);
int s=binearySearch(a,length,m);
if(s==)
printf("找不到!\n");
else
printf("%d\n",s);
return ;
} int binearySearch(int m[],int N,int k){
int start,end,middle;
start=;
end=N;
while(start<end){
middle=(start+end)/;
if(m[middle]==k){
return middle+;
}
else if(m[middle]>k){
end=middle;
}
else if(m[middle]<k){
start=middle;
}
}
return ;
}
上面结果是5.
C语言的sizeof的更多相关文章
- c语言之sizeof总结
一.sizeof的概念 Sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.Sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的 ...
- c语言之sizeof的细节
关于sizeof,我们知道sizeof并不是一个函数,尽管通常我们会用sizeof()用法(这是c语言的坑),在此关于sizeof的一些关键不被认知的进行一下总结: # include "i ...
- C语言:sizeof判断数据类型长度
#include <stdio.h> int main() { short a = 10; int b = 100; long c=100; int short_length = size ...
- c语言之sizeof总结+strlen函数
一.sizeof的概念 Sizeof是C语言的一种单目操作符,如C语言的其他操作符++.–等.它并不是函数.Sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类 ...
- 【学习笔记】【C语言】sizeof
1.用来计算一个变量或者一个常量.一种数据类型所占的内存字节数. 2.sizeof一共有3种形式 1>sizeof( 变量\常量 ) sizeof(10); char c = 'a'; size ...
- C语言关键字—-sizeof 、typedef、const、static、register、extern、#define
关键字:sizeof .#define.typedef.const.static.register.extern sizeof 1. 作用:求数据所占得内存空间大小 2. 本质:求数据得类型所占的内存 ...
- 李洪强漫谈iOS开发[C语言-028]-sizeof运算符
- C语言关键字之sizeof
C语言关键字 sizeof 是一个操作符,返回对象或类型所占内存字节数,类型为size_t(定义在<stddef.h>),有2种用法: sizeof unary-expression si ...
- C语言 二级指针内存模型①
//二级指针第一种内存模型 #include<stdio.h> #include<stdlib.h> //说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素 ...
随机推荐
- Genymotion——PC上也能玩部落冲突 Clash of Clans
零.前言 部落冲突(Clash of Clans)是手机上一个很不错的联机对战游戏,安卓和iOS平台上都有. 最近玩这个略上瘾,前几天看到部落里有人说用模拟器可以在电脑上玩,就想自己试试. 不想看我啰 ...
- [转]移动App测试中的最佳做法
Daniel Knott 用过各种不同编程语言和软件质量保证工具.他在软件开发和测试方面干了七年,自2010年起,他一直在德国汉堡的XING AG公司就职,几个项目里,比如XING调查和XING建议, ...
- Ajax大文件切割传输
文件上传服务器的大小是一定的,所以大文件可以切割成小文件,依次 传输,然后再拼接切割文件上传,用同步方式传输,为了防止异步传输 中多个块同时传输,文件拼接错误,导致文件损坏 前端页面 <!doc ...
- 20141201--JS Window
一.window.screen 包含有关用户屏幕的信息. window.screen 对象在编写时可以不使用 window 这个前缀. 一些属性: screen.availWidth - 可用的屏幕宽 ...
- jQuery 手风琴侧边菜单
动手做了一个简单手风琴菜单,上图: 点击 B 可收缩 C 列表,点击 C 改变自身和父节点 B 的样式,悬浮时均有不同的样式改变. 先看页面代码,列表的嵌套: <div id="men ...
- change
#include<iostream> using namespace std; int main() { double a; cin>>a; cout<<a< ...
- Vs2010搭建directshow 环境
一:材料 1, vs2010 2, winsdk7.1 http://www.microsoft.com/en-us/download/details.aspx?id=8442 更具自己电脑选择32 ...
- C++中的多态
多态性是面向对象程序设计的重要特征之一.多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为. 多态的实现方式包括以下3种:函数重载.运算符重载.虚函数. 1.运算符重载: #inc ...
- bzoj 1009:[HNOI2008]GT考试
这道题机房n多人好久之前就A了…… 我到现在才做出来…… 一看就是DP+矩阵乘法,但是一开始递推式推错了…… 正确的递推式应该是二维的…… f[i][j] 表示第准考证到第 i 位匹配了 j 位的方案 ...
- matlab 直方图均衡化
原理: 直方图均衡化首先是一种灰度级变换的方法: 原来的灰度范围[r0,rk]变换到[s0,sk]变换函数为:s=T(r); 为便于实现,可以用查找表(look-up table)的方式存储,即:原始 ...