1.值傳遞
- void f( int p){
- printf("\n%x",&p);
- printf("\n%x",p);
- p=0xff;
- }
- void main()
- {
- int a=0x10;
- printf("\n%x",&a);
- printf("\n%x\n",a);
- f(a);
- printf("\n%x\n",a);
- }
2.引用傳遞
- void f( int & p){
- printf("\n%x",&p);
- printf("\n%x",p);
- p=0xff;
- }
- void main()
- {
- int a=0x10;
- printf("\n%x",&a);
- printf("\n%x\n",a);
- f(a);
- printf("\n%x\n",a);
- }
3.指針傳遞
- void f( int*p){
- printf("\n%x",&p);
- printf("\n%x",p);
- printf("\n%x\n",*p);
- *p=0xff;
- }
- void main()
- {
- int a=0x10;
- printf("\n%x",&a);
- printf("\n%x\n",a);
- f(&a);
- printf("\n%x\n",a);
- }
4.指針的引用傳遞
- void f( int*&p){
- printf("\n%x",&p);
- printf("\n%x",p);
- printf("\n%x\n",*p);
- *p=0xff;
- }
- void main()
- {
- int a=0x10;
- printf("\n%x",&a);
- printf("\n%x\n",a);
- int *b=&a;
- printf("\n%x",&b);
- printf("\n%x",b);
- printf("\n%x\n",*b);
- f(b);
- printf("\n%x\n",a);
- }
爲了使用指針的引用傳遞我們要新建一個指針b,然後將b的引用傳遞給p,其實p就是b的一個拷貝,*p=*b都指向a,所以改變*p的內容也就改變a的內容。示意圖如下:
- void f( int*p){
- printf("\n%x",&p);
- printf("\n%x",p);
- printf("\n%x\n",*p);
- *p=0xff;
- }
- void main()
- {
- int a=0x10;
- printf("\n%x",&a);
- printf("\n%x\n",a);
- int *b=&a;
- printf("\n%x",&b);
- printf("\n%x",b);
- printf("\n%x\n",*b);
- f(b);
- printf("\n%x\n",a);
- printf("\n%x\n",b);
- }
5.錯誤案例
- #include <stdio.h>
- #include <malloc.h>
- #include <string.h>
- void Allocate(char* p,int size){
- printf("\n%x",&p);
- printf("\n%x",p);
- p=(char*)malloc(size);
- }
- void Free(char* p){
- free(p);
- }
- void main()
- {
- char *str=NULL;
- printf("\n%X",&str);
- printf("\n%X",str);
- Allocate(str,100);
- strcpy(str,"Hello World!");
- printf("\n%s",str);
- Free(str);
- printf("\nstr=%s",str);
- }
5.正確案例
- #include <stdio.h>
- #include <malloc.h>
- #include <string.h>
- void Allocate(char*& p,int size){
- printf("\n%x",&p);
- printf("\n%x",p);
- p=(char*)malloc(size);
- }
- void Free(char* p){
- free(p);
- }
- void main()
- {
- char *str=NULL;
- printf("\n%X",&str);
- printf("\n%X",str);
- Allocate(str,100);
- strcpy(str,"Hello World!");
- printf("\n%s",str);
- Free(str);
- }
因爲指針引用傳遞的是指針的拷貝,所以&str和&p,是地址是一樣的,所以對p分配內容空間也就是對str分配空間,所以沒有問題!