//通过以下代码简要说明
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}Linklist;
void test(int x,int y,int *s,int *&t,Linklist *i,Linklist *&j)
{
printf("变量a形参(传地址)的值:%d\n",x);
printf("变量b形参(传地址)的值:%d\n",y);
printf("变量a形参的(传地址)地址的值:%d\n",&x);
printf("变量b形参的(传地址)地址的值:%d\n",&y);
printf("指针变量s形参的(传地址)地址值:%d\n",&s);
printf("指针变量s形参(传引用)的地址值:%d\n",&t);
printf("链表指针t形参的(传地址)地址值:%d\n",&i);
printf("链表指针t形参(传引用)的地址值%d\n",&j);
}
void main()
{
int a,b=5;
int *s;
Linklist *t;
printf("变量a的值:%d\n",a);
printf("变量b的值:%d\n",b);
printf("变量a的地址的值:%d\n",&a);
printf("变量b的地址的值:%d\n",&b);
printf("指针变量s的地址:%d\n",&s);
printf("链表指针t的地址:%d\n",&t); test(a,b,s,s,t,t);
}
运行结果如图:
通过运行结果可以看出,实参传递到形参
1.通过地址传递时,形参会分配一块新的内存将实参的值放在其中(不论该变量是普通变量,还是指针变量,还是结构体指针变量),通过上题中通过地址传递的形参的地址均不同于实参地址可以看出
2.通过引用传递时,不会再分配一块新的内存,而是直接操作实参中变量本身,通过上题中通过引用传递的形参地址与实参地址相同可以看出
3.除此可以看出,如果不为变量初始化,系统会自动给他赋值。