1. 通過 &變量 可以獲取變量地址:
#include <stdio.h>
int main(void)
{
int num = 10;
printf("變量值: %d\n",num);
printf("變量址: %d\n",&num);
getchar();
return 0;
}
2. 表示變量地址的變量就是指針:
#include <stdio.h>
int main(void)
{
int num = 10;
int *p = #
printf("%d,%p\n",num,p);
getchar();
return 0;
}
3. *指針 就如同變量本身是一樣的:
#include <stdio.h>
int main(void)
{
int num = 10;
int *p = #
printf("%d,%p,%d\n",num,p,*p);
*p = 11;
printf("%d,%p,%d\n",num,p,*p);
(*p)++;
printf("%d,%p,%d\n",num,p,*p);
num = 99;
printf("%d,%p,%d\n",num,p,*p);
getchar();
return 0;
}
4. 聲明指針時要注意初始化,沒有初始化的指針是危險的:
#include <stdio.h>
int main(void)
{
int n1 = 11;
int n2 = 22;
int *p = NULL; /* 初始化為空 */
p = &n1;
printf("%d,%p,%d\n",n1,p,*p);
p = &n2;
printf("%d,%p,%d\n",n2,p,*p);
getchar();
return 0;
}
5. 為什麼沒有初始化的指針是危險的:
#include <stdio.h>
int main(void)
{
int *p;
// 上面的指針p沒有初始化話,但它也有個垃圾地址
printf("%p\n",p);
// 此時如果給它賦值,誰知道會覆蓋了什麼?
//*p = 100; /* 不要執行這個 */
getchar();
return 0;
}
6. 指向常量的指針: 不能通過指針修改它指向的值,但該值可以通過其變量修改
#include <stdio.h>
int main(void)
{
int n1 = 111;
int n2 = 222;
const int *p = &n1; /* 注意 const 的使用 */
printf("%d,%p,%d\n",n1,p,*p);
n1 = 333;
//*p = 333; /* 不可以這樣,因為現在的指針是常量 */
printf("%d,%p,%d\n",n1,p,*p);
p = &n2; /* 可以改變指針的指向 */
printf("%d,%p,%d\n",n2,p,*p);
getchar();
return 0;
}
7. 常量指針: 鎖定指針的指向
#include <stdio.h>
int main(void)
{
int n1 = 111;
int n2 = 222;
int *const p = &n1; /* 注意 const 的使用 */
printf("%d,%p,%d\n",n1,p,*p);
n1 = 333;
//*p = 333; /* 不可以這樣,因為現在的指針是常量 */
printf("%d,%p,%d\n",n1,p,*p);
// p = &n2; /* 現在不可以改變指針的指向了 */
// printf("%d,%p,%d\n",n2,p,*p);
getchar();
return 0;
}
8. 指針是有類型的:
#include <stdio.h>
int main(void)
{
long n = 100L;
float f = 1.5f;
double d = 3.14159265;
long *p1 = &n;
float *p2 = &f;
double *p3 = &d;
printf("%ld\n",*p1);
printf("%g\n",*p2);
printf("%.8f\n",*p3);
getchar();
return 0;
}
9. 令人迷惑的指針定義:
到底應該怎樣寫:
int *p;
int * p;
int* p;
因為 C 語言忽略空白,這些都是對的,但下面的例子會說明哪個更好:
#include <stdio.h>
int main(void)
{
int n1,n2,*p; /* 定義了兩個整數(n1、n2),和一個整數指針(p) */
n1 = 111;
n2 = 222;
p = &n1;
printf("%d,%p\n",*p,p);
p = &n2;
printf("%d,%p\n",*p,p);
getchar();
return 0;
}
返回“學點C語言 - 目錄”