c语言数组如何在函数中传递?不要指针传递

Python013

c语言数组如何在函数中传递?不要指针传递,第1张

数组只能通过指针传递,不能通过值传递。

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

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

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 = 0i <sii++) {

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 = 0i <sii++) {

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 = 0i <sii++) {

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 = 0i <sizeof(ns)/sizeof(ns[0])i++) {

printf("%d\n", *(ns+i))

}

getchar()

return 0

}

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

int i

for (i = 0i <sii++) {

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 = 0p[i]i++) {

printf("%c: %d\n", p[i], p[i])

}

}

一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参

数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组

修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。

#include<stdio.h>

//数组作为函数参数,可以省略元素个数

//数组作为函数参数,传递是整个数组的地址,修改了函数形参数组元素的值,会影响到外面的实参数组

void change(int array[])

{

printf("array ==%p\n",array)

array[0] = 100

}

int main()

{

int ages[6] = {10,11,13,15,11,18}

printf("array ==%p\n",ages)

change(ages)

printf("%d\n",ages[0])

return 0

}

输出结果为: array ==0x7fff5be26c00

array ==0x7fff5be26c00

100

数组作为参数是按地址传递的

数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送, 也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。