//
// main.c
// Pointer_search
//
// Created by ma c on 15/8/2.
// Copyright (c) 2015年 bjsxt. All rights reserved.
// 要求:通過指針查找,實現比較兩個有序數組中的元素,輸出兩個數組中的第一個相同的元素值。
#include <stdio.h>
int *searchSameElement(int *a,int *b,int len1,int len2);
int main(int argc, const char * argv[])
{
int a[] = {5,11,8,6,7,10};
int b[] = {80,9,14,8,14,19,4};
//下面這種計算數組長度的方法在函數內部實現比較通用,但是,如果將其當做參數傳遞給外部函數時,數組名會退化成指針,此時下面計算數組長度的方法就不適用了。
int len1 = sizeof(a)/sizeof(a[0]);//計算數組a的長度
int len2 = sizeof(b)/sizeof(b[0]);//計算數組b的長度
int *pt = searchSameElement(a,b,len1,len2);//返回第一個相同的值地址
if(pt)
printf("%d\n",*pt);
else
printf("the same number don not find!\n");
return 0;
}
int *searchSameElement(int *a,int *b,int len1,int len2)
{
int *temp = a;//初始化臨時指針,防止temp成為野指針
for(int i=0;i<len1;i++)
{
for(int j=0;j<len2;j++)
{
if(*(a+i)==*(b+j))
{
temp = a+i;
goto loop;
//此處表示找到第一個相同元素,跳轉到結尾,return a+i
}
if(j==len2)
{
break;//表示第一個外循環數在內循環沒有找到,跳到外循環繼續尋找
}
}
if(i==(len1-1))
{
temp = 0;
goto loop;
//此處表示內外循環沒有找到第一個相同元素,跳轉到結尾,return 0
}
}
loop: return temp;
}