首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言指標搜尋:找出兩有序陣列首個相同元素 (含 goto 標籤用法)

     編輯:關於C語言

前言

示範以指標遍歷兩陣列尋找首個相同值,並展示 `goto` 標籤跳出多層迴圈的寫法 (教學用,實務建議用旗標或函數回傳)。

完整程式碼

#include 

int *searchSameElement(int *a, int *b, int len1, int len2);

int main() {
    int a[] = {5, 11, 8, 6, 7, 10};
    int b[] = {80, 9, 14, 8, 14, 19, 4};
    int len1 = sizeof(a)/sizeof(a[0]);
    int len2 = sizeof(b)/sizeof(b[0]);

    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;
    for (int i = 0; i < len1; i++) {
        for (int j = 0; j < len2; j++) {
            if (*(a+i) == *(b+j)) {
                temp = a + i;
                goto loop;           /* 跳出雙層迴圈 */
            }
            if (j == len2 - 1) break; /* 內層跑完未找到,續外層 */
        }
        if (i == len1 - 1) {         /* 外層也跑完 */
            temp = 0;
            goto loop;
        }
    }
loop:
    return temp;
}

關鍵點說明

  • 陣列名作參數傳遞時退化為指標,函數內無法用 `sizeof` 算長度,需外部傳入。
  • `*(a+i)` 等價 `a[i]`,指標算術存取。
  • `goto` 可簡化多層迴圈跳出,但濫用會降低可讀性;現代寫法多用 `bool found` 旗標或提前 `return`。
  • 若陣列已排序,可用雙指標 O(n+m) 取代 O(n×m) 雙層迴圈。

優化版 (雙指標,陣列已排序)

int *searchSorted(int *a, int *b, int len1, int len2) {
    int i = 0, j = 0;
    while (i < len1 && j < len2) {
        if (a[i] == b[j]) return a + i;
        else if (a[i] < b[j]) i++;
        else j++;
    }
    return NULL;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved