---------------------- ASP.Net+Unity開發、.Net教育訓練、期待與您交流! ----------------------
今天看了李明傑老師的C語言基礎部分,當然自己感覺也是最難的部分,也就是指針。
首先呢,要明白指針儲存的是一個變量的位址。說白了指針就是一個位址(亂說的。。。)
下面是一段很經典的利用指針對函數進行操作來交換兩個數的代碼
#include <stdio.h>
//void swap(char v1, char v2) {
// printf("交換之前之前:v1=%d,v2=%d\n", v1, v2);
//
// char temp;
//
// temp = v1;
// v1 = v2;
// v2 = temp;
//
// printf("調用函數之後:v1=%d,v2=%d\n", v1, v2);
//}
void swap(char *v1, char *v2) {
char temp;
temp = *v1;
*v1 = *v2;
*v2 = temp;
}
int main(int argc, const char * argv[])
{
char a = 10;
char b = 9;
printf("調用函數之前:a=%d,b=%d\n", a, b);
swap(&a, &b);
printf("調用函數之後:a=%d,b=%d\n", a, b);
return 0;
}
定義一個指針使用的方式就是 類型 *變量名 such as :int *p;意思就是定義一個int類型的指針變量。
還有一個很難了解的就是在定義指針之後,在使用他的時候就不能在後面加*号了,加*号的意思是調用指針儲存的位址空間的值。
such as:int *p;int a=0; p=&a;那麼*p就是調用p指針儲存的位址空間的值,也就是a的值為0。
下面一段代碼也是很經典的用一個函數傳回兩個值
#include <stdio.h>
int sumAndMinus(int v1, int v2, int *p) {
*p = v1 - v2;
return v1 + v2;
}
int main(int argc, const char * argv[])
{
int a = 10;
int b = 4;
// 接收a跟b的和
int sum;
// 接收a跟b的差
int minus;
sum = sumAndMinus(a, b, &minus);
printf("sum=%d, mimus=%d", sum, minus);
return 0;
}
這也就是通過指針實作的功能,通過指針将一個變量傳入函數,然後改變這個指針儲存的位址空間的值。
#include <stdio.h>
void test() {
char a;
// a = 10; 直接引用
// 定義了一個指針變量b,而且b隻能指向char類型的變量
char *b;
// 讓指針變量b指向a
b = &a;
// 這裡的*b代表:通路b值對應的存儲空間(也就是變量a的存儲空間)
// 相當于a = 10;
*b = 10;
printf("%d\n", a);
a = 11;
// 這裡的*b相當于取出變量a存儲的值
printf("%d\n", *b);
}
void test1() {
char a = 10;
char *b = &a;
/* 相當于下面兩句
char *b;
b = &a;
*/
}
void test2() {
// 這是錯誤的做法
char *p;
// 應該在指針确定指向的變量後,再進行相應的操作
*p = 10;
}
void test3() {
// 這個錯發也是錯誤的
char *p;
// 指針變量是用來存儲變量位址的,不能随便指派一個常數,除非你這個常熟恰好是某個變量的位址
p = 100;
}
int main(int argc, const char * argv[])
{
return 0;
}
上面這段代碼是李明傑老師寫的,很清晰的講明了什麼是指針。
---------------------- ASP.Net+Unity開發、 .Net教育訓練、期待與您交流! ----------------------