程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言的sizeof,C語言sizeof

C語言的sizeof,C語言sizeof

編輯:關於C語言

C語言的sizeof,C語言sizeof


今天幫同學想用C實現數組的折半查找,本來算法挺簡單的,可是折騰了好幾個小時才發現問題在哪,這個sizeof坑人不淺啊。

 1 #include<stdio.h>
 2 void m(int []);
 3 int main(){
 4     int a[9]={1,2,3,4,5,6,7,8,9};
 5     printf("%d\n",sizeof(a));
 6     m(a);
 7     
 8     return 0;
 9 }
10 
11 void m(int k[]){
12     printf("%d\n",sizeof(k));
13 
14 }

上面第5行的結果是39,第12行的結果是4,為啥同一個數組怎麼結果不一樣呢?原因就是發生在sizeof這裡。那是因為sizeof是一個操作符,誤認為是一個函數,還有就是數組在傳遞的過程中已經失去其原有的本義,在m函數中其實際上是傳遞的一個數組指針,所以第12行實際上是測試的指針的大小。

明白這裡了,附上一篇C實現折半的代碼

 1 #include<stdio.h>
 2 int binearySearch(int[],int,int);
 3 int main(){
 4     int a[9]={1,2,3,4,5,6,7,8,9};
 5     int m=5;
 6     int length=sizeof(a)/sizeof(int);
 7     int s=binearySearch(a,length,m);
 8     if(s==0)
 9         printf("找不到!\n");
10     else
11     printf("%d\n",s);
12     return 0; 
13 }
14 
15 int binearySearch(int m[],int N,int k){
16 int start,end,middle;
17     start=0;
18     end=N;       
19     while(start<end){
20         middle=(start+end)/2;
21         if(m[middle]==k){
22             return middle+1;
23         }
24         else if(m[middle]>k){
25             end=middle;
26         }
27         else if(m[middle]<k){
28             start=middle;
29         }
30     }
31     return 0;
32 }
上面結果是5.

 

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved