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

學點C語言(36):函數 - 數組參數

編輯:關於C語言

數組參數屬於指針參數.

指針參數即時傳址參數(或叫引用參數), 如果想在函數中修改參數的值, 這是唯一的途徑.

如果把數組當作參數, 不管你願意與否, 它就是指針, 指向第一個值的指針.

1. 數組參數就是指向第一個元素的指針:

#include <stdio.h>

void getArr(int p[], int si);

int main(void)
{
  int ns[] = {1,2,3,4,5};

  getArr(ns, sizeof(ns)/sizeof(ns[0]));

  getchar();
  return 0;
}

void getArr(int p[], int si) {
  int i;
  for (i = 0; i < si; i++) {
    printf("%d\n", p[i]);
  }
}

2. 干脆直接聲明為指針:

#include <stdio.h>

void getArr(int *p, int si);

int main(void)
{
  int ns[] = {1,2,3,4,5};

  getArr(ns, sizeof(ns)/sizeof(ns[0]));

  getchar();
  return 0;
}

void getArr(int *p, int si) {
  int i;
  for (i = 0; i < si; i++) {
    printf("%d\n", p[i]);
  }
}

3. 即使你在形參中指定維數也不起作用:

#include <stdio.h>

void getArr(int p[2], int si);

int main(void)
{
  int ns[] = {1,2,3,4,5};

  getArr(ns, sizeof(ns)/sizeof(ns[0]));

  getchar();
  return 0;
}

void getArr(int p[2], int si) {
  int i;
  for (i = 0; i < si; i++) {
    printf("%d\n", p[i]);
  }
}

4. 既然是指針, 其值就有被修改的可能:

#include <stdio.h>

void getArr(int p[], int si);

int main(void)
{
  int ns[] = {1,2,3,4,5};
  size_t i;

  getArr(ns, sizeof(ns)/sizeof(ns[0]));

  for (i = 0; i < sizeof(ns)/sizeof(ns[0]); i++) {
    printf("%d\n", *(ns+i));
  }

  getchar();
  return 0;
}

void getArr(int p[], int si) {
  int i;
  for (i = 0; i < si; i++) {
    p[i]++;
  }
}

5. 如果是字符數組, 它自己能判斷數組尾界:

#include <stdio.h>

void getArr(char p[]);

int main(void)
{
  char ns[] = "ABCDEFG";

  getArr(ns);

  getchar();
  return 0;
}

void getArr(char p[]) {
  int i;
  for (i = 0; p[i]; i++) {
    printf("%c: %d\n", p[i], p[i]);
  }
}

返回“學點C語言 - 目錄”

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