C语言数组参数传递的注意事项,demo code中//标出
#include<stdio.h>
void printData(int data)
{
printf("%d\n",data);
}
void printArr(int arry[],int len)//形参中不存在数组的概念,即使中括号约定了数组的大小也无效
//传递的为一个地址,是数组的首地址
{
int i;
printf ("printArr的大小是%d\n",sizeof(arry));//在操作系统OS中用8个字节表示一个地址,不会变化
for (i=0;i<len;i++){
printf ("%d ",arry[i]);
}
}
int main()
{
int len;
int arry[]={1,2,3,4};
printData(arry[2]);
len=sizeof(arry)/sizeof(arry[0]);
int i;
printf ("main中Arr的大小是%d\n",sizeof(arry));//会根据定义中的数值变化,一个4字节,3个12字节
for (i=0;i<len;i++){
printf ("%d ",arry[i]);
}
putchar ('\n');
printArr(&arry[0],len);//传递过去为一个地址,填写首地址也行,第一个元素的地址也是数组的首地址
printArr(arry,len);//数组名代表整个数组的首地址
return 0;
}
C语言参数传递对比
//参数传递中,数值的传递与数组的传递不同,
//数值的传递是传递数据,重新开辟临时地址运算
//数组的传递是传递该数据的地址,被传递的运算在该数组的地址上进行
#include<stdio.h>
void changeData(int data)//只传递数值,开辟临时空间运算
{
data=data+100;
printf ("%d %p\n",data,&data);
}
int main()
{
int data =10;
changeData(data);
printf ("%d %p\n",data,&data);
return 0;
}
#include<stdio.h>
void changedata(int data[])
{
data[0]=data[0]+100;
printf("%d %p\n",data[0],&data[0]);//打印出来与main函数地址相同,该值也相同
}
int main()
{
int data[2]={10,20};
changedata(data);//名称作为首地址进行传参
printf ("%d %p\n",data[0],&data[0]);
return 0;
}