//i1、i2在函式中是const變數,不能改變值
const int& min(const int& i1, const int& i2)
{
if(i1 < i2)
return (i1);
return (i2);
}
int main()
{
min(1+2, 3+4);
return 0;
}
/*
* const的函式意義是指,若函式是傳回參考指標變數,
* 則該變數傳回後不能直接變更回傳值
* min(1+2,3+4)=0;由於是const函式,傳回值不能作改變
*/
##ShowAll##
//好處是傳一般變數即可
void inc_counter(int& counter)
{
++counter;
}
int main()
{
int a_count = 0;
inc_counter(a_count);
std::cout << a_count << '\n' ; //傳回值+1
return 0;
}
/* 這種作法似乎不能用在C語言 */
##ShowAll##
/*
* 指標本身也是有記憶體位址,
* 所以宣告一個指向指標形態變數的指標是合法的
*/
int **pp,*p,x=5;
pp = &p;
p = &x;
**pp = 10; //最後x值是10
##ShowAll##
//&運算子的意義為:取得變數的記憶體位址
//*運算子的意義為:取得變數的記憶體值
int *ptr,a;
ptr = &a;
ptr++; //將指標ptr指向變數a的後4個bytes
ptr = ptr - 20; //將指標ptr指向變數a的後20*4個bytes
int *ptr,a[10];
ptr = a+5;
printf(%d %d,*a,*ptr) //會印出陣列a[0]的數值和a[5]的數值
##ShowAll##
函數也在記憶體中,所以指標也可以指向函數
int add(int,int);
int add(int,int);
int main(void)
{
int ans, (*p)(int x, int y); //宣告函數指標p
p = add; //將p指向函數add
ans = (*p)(3,4) //間接呼叫add函數
printf("%d",ans);
}
void add(int x,int y)
{
returb x+y;
}
##ShowAll##
void func(int*,int);
int main(void)
{
int x=0,*p;
p = &x;
func(p,3); //Call-by-Reference
printf("x = %d",x);
}
void func(int *p,int y)
{
*p = y;
}
##ShowAll##