1.数组和函数开发
数组作为函数的参数
-
传递数组中的某个元素。
#include <stdio.h> void printdata(int data){ printf("%d\n",data); } int main(){ int arr[3] = {1,2,3}; printdata(arr[2]); return 0; }
-
数组名当作函数实际参数
#include <stdio.h> void printdata(int arr[3]){ int i; for(i=0;i<3;i++){ printf("%d ",arr[i]); } printf("\n"); } int main(){ int arr[3] = {1,2,3}; printdata(arr); return 0; }
2.形式参数的特点
#include <stdio.h>
void printdata(int arr[3],int len){
//形参中不存在数组的概念
//即便是中括号约定了数组的大小也无效
//原因是:传递的是一个地址,是数组的首地址
//操作系统中用8个字节来表示一个地址
int i;
printf("printdata的大小是:%d\n",sizeof(arr));
for(i=0;i<len;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
int main(){
int len;
int arr[3] = {1,2,3};
len = sizeof(arr)/sizeof(arr[0]);
printf("main:arr的大小是:%d\n",sizeof(arr));
printdata(arr,len);//数组名代表数组的首地址
//第一个元素的地址也是数组的首地址
return 0;
}
3.实际参数的特点
-
不能改变main函数的值
//无法改变main函数的值 //原因:传递的不是同一个地址 #include <stdio.h> void changedata(int data){ data =data + 100; printf("address=%p data=%d\n",&data,data); } int main(){ int data = 10; changedata(data); printf("address=%p data=%d",&data,data); return 0; }
-
能改变main函数的值
//能直接更改main函数的值 //原因:传递的是地址 //能对main函数的数值进行修改 #include <stdio.h> void changedata(int data[]){ data[0] =data[0] + 100; printf("address=%p data=%d\n",&data,data[0]); } int main(){ int data[2] = {10,20}; changedata(data); printf("address=%p data=%d",&data,data[0]); return 0; }