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;
}