重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
void func(int a){a=100;}
成都创新互联专注于平阴企业网站建设,响应式网站,商城开发。平阴网站建设公司,为平阴等地区提供建站服务。全流程按需网站策划,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
int a=10;
func(a);
printf("a=%d",a); // 仍然显示 a=10, 因为整型参数a在func()中是按值传递的, 也就是说func()仅使用a的值, 而对存储a的内存地址不加修改;
void func(int* a){ *a=100;}
int a=10;
func(a);
printf("a=%d",a); // 显示 a=100, 因为整型参数指针a在func()中是按地址传递的, 也就是说func()使用a的存储地址, 直接修改其内容.
数组参数与指针参数相同, 均按地址传递.
这个就是2种函数调用方式中的地址传递调用方式(另一种是传值方式)。
下面通过具体的实例来说明传地址调用方式:
#includestdio.h
void swap(int *p1, int *p2) // 交换两个整数——交换形参值(地址)
{ // 实际上是改变p1与p2所指向的地址
int *temp;
temp = p1;
p1 = p2;
p2 = temp;
printf("交换后:x=%d y=%d\n", *p1, *p2);
}
void main()
{
int x, y;
scanf("%d%d", x, y);
swap(x, y); // 调用swap函数的时候,是将变量x和y的地址传递进去的,也就是使形参p1和p2分别指向变量x和y的地址,改变的实际上还是x和y的值,只不过是通过地址的变换来实现的
printf("交换前:x=%d y=%d\n", x, y);
}
int main(){
int a=0,b=1;
swap(a,b);
}
void swap(int a,int b);//实际是不能交换a和b的值的,是值传递
而
void f(int a[],int n){//这里a是数组首地址,所以可以更改数组里的值
}