C語言靈魂——————指針 之一

 

C語言的靈魂——————指針

【1】、
地址運算符 & 後跟一個變量名時,&給出該變量的地址
間接運算符 *當後跟一個指針名或地址時,*給出存儲在被指向地址中的數值  

int *p;
int i=3;
int j;
p=&i;
j=*p;

以上兩條語句相當於 j=i
1、p保存了i的地址,因此p指向i
2、p不是i,i也不是p,更準確的說:修改P的值不影響i的值,修改i的值不影響P
的值
【2】指針變量的聲明
聲明變量需要說明指針所指向變量的類型,爲什麼?
因爲不同的變量類型佔用的存儲空間大小不同,而有些指針操作需要知道變量類型所佔用的存儲空間,同時程序也需要了解地址中存儲的時何種數據。
【3】指針的定義
地址:
從零開始的非負整數
地址就是內存單元的編號

指針就是地址
指針變量是存放地址的變量
指針和指針變量是兩個不同的概念
指針的本質就是一個操作受限的非負整數(指針可以進行相減運算,但不可以進行+  *  /的運算)
【4】指針的重要性
 表示一些複雜的數據結構
 快速的傳遞數據,減少了內存的耗用【重點】
 使函數返回一個以上的值(return只能返回一個值)【重點】
 能直接訪問硬件
 能夠方便的處理字符串
 是理解面嚮對象語言中引用的基礎


【5】指針的分類
 1、基本類型指針
#include<stdio.h>
int main(void)
{
 int *p;//p是變量的名字,int *表示p變量存放的是int類型變量的地址
 int i = 3;
 int j;
 p=&i; //地址運算符,p只能夠存放int類型變量的地址
 j=*p;//*爲間接運算符

 //上面的兩條語句相當於“j=i”
 printf("%d\n",j);
 return 0;
}

經典指針程序:

/*******************************8
2011年9月13日20:42:47
目的:互換兩個數
************************************/
#include<stdio.h>
//不能完成互換功能
void huhuan_1(int a,int b)
{
 int t;

 t=a;
 a=b;
 b=t;
 printf("a=%d,b=%d\n",a,b);
 return ;

}

//可以完成互換功能
void huhuan_2(int *p,int *q)
{
 int t;
 
 t=*p;
 *p=*q;
 *q=t;

 return ;

}
int main(void)
{
 int a = 3;
 int b = 5;
 
 //huhuan_1(a,b); 
 //huhuan_2(a,b); //錯誤的
 huhuan_2(&a,&b);
 printf("a=%d,b=%d\n",a,b);
 return 0;
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章