程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> c指針與地址 指針與函數

c指針與地址 指針與函數

編輯:關於C

一、指針與地址說明:
1、地址運算符&只能應用於內存中的對象,即變量與數組元素;它不能作用於表達式、常量或register類型的變量
2、一元運算符*是間接尋址或間接引用運算符,當作用於指針時,將訪問指針所指向的對象
3、指針只能志向某種特定類型的對象;一個例外是指向void類型可以存放指向任何類型的指針,但它不能間接引用其自身

二、指針與函數
c語言以傳值的方式將參數值傳遞給被調用函數,因此,被調用函數不能直接修改主調函數中的變量值
但是可以通過指針間接訪問它們指向的操作數

[html] 
#include <stdio.h> 
 
void swap(int *x ,int *y); 
 
int main() 

    int x = 1; 
    int y = 2; 
        swap(&x,&y); 
        printf("x=%d  y=%d\n",x,y); 

 
 
void swap(int *x ,int *y) 

   int temp ; 
   temp = *x; 
   *x   = *y; 
   *y   = temp; 

其輸出如下
[html]
pateo@pateo-B86N53X:~/work/study$ cc main.c -o main 
pateo@pateo-B86N53X:~/work/study$ ./main 
x=2  y=1 


為了方便理解,我修改了下例子,學習都是在嘗試中進步的,ok?
[html]
#include <stdio.h> 
 
void swap(int *x ,int *y); 
 
int main() 

    int m = 1; 
    int n = 2; 
        swap(&m,&n); 
        printf("m=%d  n=%d\n",m,n); 

 
 
void swap(int *x ,int *y) 

   int temp ; 
   temp = *x; 
    printf("temp=%d\n",temp); 
   *x   = *y; 
   *y   = temp; 

其輸出:
[html] 
pateo@pateo-B86N53X:~/work/study$ cc main.c -o main 
pateo@pateo-B86N53X:~/work/study$ ./main 
temp=1 
m=2  n=1 


到這裡我已經預感到函數的指針參數和java的函數參數是有區別的,下面我把上面的代碼進行分析如下:
[html] 
int  *x ; 
int  *y; 
 
x = &m ; 
y = &n 
 
而函數裡面的運輸替代 
 
temp = * (&m) 
 
*(&m) = *(&n) 
 
*(&n) = temp 
 
從上面應該能更好的理解 


 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved