#includevoid sum(int *j){ int i=0; while(i<4){ j[0]+=j[i++]; } } int main() { int j[]={1,2,3,4}; sum(j); printf("j[0] in main is %dn",j[0]); return(0); }
输出:j[0] in main is 11
C中数组名就是指针,C中子函数用指针传参时,子函数会直接操作原值,而整形变量就不行,整形变量就不举例子了,看下面的如何用指针传参来改变原值
变量的指针传参#includevoid sum(int *a,int *b){ *a=33,*b=65; printf("nIn sum,a= %d",*a); printf("nIn sum,b= %d",*b); } int main() { int a=32,b=64; int *pa,*pb; pa=&a; pb=&b; printf("nIn main,before sum,a= %d",a); printf("nIn main,before sum,b= %d",b); sum (pa,pb); printf("nIn main,after sum,a= %d",a); printf("nIn main,after sum,b= %d",b); }
在sum函数中,需要用*a来操作原值(主函数的a),运行结果是
In main,before sum,a= 32 In main,before sum,b= 64 In sum,a= 33 In sum,b= 65 In main,after sum,a= 33 In main,after sum,b= 65
在gcc编译时,也就是用C语言编写时,定义sum时,只能用指针,不能用引用。用引用会报错。网上好多讲c语言引用传参的,坑死了
用g++编译时,才能用引用传参,也就是说C++才支持引用传递,C语言不支持!引用传参具体怎么用呢?请看下面的例子,add函数是引用传参,调用时,直接把变量名传进去。add函数会直接操作原值,不会在内部拷贝一份
#includeint add(int &x,int &y); int main() { int a=3,b=5; int sum=add(a,b); printf("sum=%dn",sum); return 0; } int add(int &x,int &y) { x=x+1; y=y+1; return x+y; }
sum=10用尾插法建立单链表,并输出。
王道书的代码, 主要代码是C,但用到了C++的引用传参,需要用g++编译
#include#include typedef struct LNode{ int data; struct LNode *next; }LNode,*linkList; //LNode指示单个的节点,linkList指示链表 void List_TailInsert(linkList &L){ int x; L=(linkList)malloc(sizeof(LNode)); LNode *s,*r=L; //r为表尾指针 scanf("%d",&x); //输入结点的值 while(x!=9999){ //输入9999表示结束 s=(LNode *)malloc(sizeof(LNode)); s->data=x; r->next=s; r=s; //r指向新的表尾结点 scanf("%d",&x); } r->next=NULL; //return L; } void show(linkList &L){ LNode *p=L->next; int i=0; while(p!=NULL){ printf("%dn",p->data); p=p->next; } } int main() { linkList L1; List_TailInsert(L1); show(L1); }
PS E:data-structure新建文件夹> g++ .3.尾插法使用引用.c PS E:data-structure新建文件夹> .a.exe 1 2 3 4 9999 1 2 3 4



