读书人

关于函数传值和传址有关问题

发布时间: 2013-09-15 19:58:13 作者: rapoo

关于函数传值和传址问题
我还是不懂额,我把结构体放最上面了,为什么进入函数里面结构体都有值,但是出去全空了,此为代码

cars3.h

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "utils.h"
//#include "array_list.h"


#define MAX_CARS 20
typedef struct car
{
int year;
char make[25];
char model[25];
char style[25];
char color[20];
char mileage[8];
char air_condition;
char inventory_num[16];
double price;
char previous_owner[30];
} Car;
typedef struct carlist
{
Car elements[MAX_CARS];
int last;
} Carlist;

开头 cars3.c

#include"cars3.h" //里面有结构体

Car Car1[100];
Carlist l;

int main {
...
while(Car1[addcount].year!=NULL)
{
al_add(Car1,l);
addcount++;
}
...
}

为什么 al_add的函数 一出来就没有了呢
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

函数传参就是复制,传值的话函数里面不管怎么修改复制进去的值都跟外面没关系,传地址的话函数里面可以通过复制进去的地址访问修改外面的值
函数里面一直有值,一出函数就变空——很简单,里面和外面的同名变量不是同一个变量,在函数里面监控的是里面那个变量,在函数外面监控的是外面那个变量,如果两个变量在函数内都有效,内部变量会将外部变量隐藏


+
al_add代码呢。


void al_add(Car Car1[], Carlist l)
{
l.elements[l.last].year=Car1[l.last].year;
strcpy(l.elements[l.last].make,Car1[l.last].make);
strcpy(l.elements[l.last].model,Car1[l.last].model);
strcpy(l.elements[l.last].style,Car1[l.last].style);
strcpy(l.elements[l.last].color,Car1[l.last].color);
strcpy(l.elements[l.last].mileage,Car1[l.last].mileage);
l.elements[l.last].air_condition=Car1[l.last].air_condition;
strcpy(l.elements[l.last].inventory_num,Car1[l.last].inventory_num);
strcpy(l.elements[l.last].previous_owner,Car1[l.last].previous_owner);
l.elements[l.last].price=Car1[l.last].price;
l.last++;
}

在这个函数内,全局变量l和函数输入参数中的局部变量l同时生效,前者被隐藏,后面的所有操作都是对局部变量l操作,函数退出时局部变量销毁,就这样

读书人网 >C语言

热点推荐