数组参数属于指针参数.指针参数即时传址参数(或叫引用参数),如果想在函数中修改参数的值,这是唯一的途径.如果把数组当作参数,不管你愿意与否,它就是指针,指向第一个值的指针.1.数组参数就是指向第一个元素的指针:#include<stdio.h>voidgetArr(intp[],intsi);intmain(void){intns[]={1,2,3,4,5};getArr(ns,sizeof(ns)/sizeof(ns[0]));getchar();return0;}voidgetArr(intp[],intsi){inti;for(i=0;i<si;i++){printf("%d\n",p[i]);}}2.干脆直接声明为指针:#include<stdio.h>voidgetArr(int*p,intsi);intmain(void){intns[]={1,2,3,4,5};getArr(ns,sizeof(ns)/sizeof(ns[0]));getchar();return0;}voidgetArr(int*p,intsi){inti;for(i=0;i<si;i++){printf("%d\n",p[i]);}}3.即使你在形参中指定维数也不起作用:#include<stdio.h>voidgetArr(intp[2],intsi);intmain(void){intns[]={1,2,3,4,5};getArr(ns,sizeof(ns)/sizeof(ns[0]));getchar();return0;}voidgetArr(intp[2],intsi){inti;for(i=0;i<si;i++){printf("%d\n",p[i]);}}4.既然是指针,其值就有被修改的可能:#include<stdio.h>voidgetArr(intp[],intsi);intmain(void){intns[]={1,2,3,4,5};size_ti;getArr(ns,sizeof(ns)/sizeof(ns[0]));for(i=0;i<sizeof(ns)/sizeof(ns[0]);i++){printf("%d\n",*(ns+i));}getchar();return0;}voidgetArr(intp[],intsi){inti;for(i=0;i<si;i++){p[i]++;}}5.如果是字符数组,它自己能判断数组尾界:#include<stdio.h>voidgetArr(charp[]);intmain(void){charns[]="ABCDEFG";getArr(ns);getchar();return0;}voidgetArr(charp[]){inti;for(i=0;p[i];i++){printf("%c:%d\n",p[i],p[i]);}}
阅读全文 >