学点 C 语言(36): 函数 - 数组参数

180it 2020-03-05 AM 1914℃ 0条

学点 C 语言(36): 函数 - 数组参数

数组参数属于指针参数.

指针参数即时传址参数(或叫引用参数), 如果想在函数中修改参数的值, 这是唯一的途径.

如果把数组当作参数, 不管你愿意与否, 它就是指针, 指向第一个值的指针.

  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]);    
}

}

  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]);    
}

}

  1. 即使你在形参中指定维数也不起作用:

    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]);    
}

}

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

    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]++;    
}

}

  1. 如果是字符数组, 它自己能判断数组尾界:

    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]);       
}

}

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

学点 C 语言(36): 函数 - 数组参数