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

學點C語言(20):數據類型 - 指針

編輯:關於C語言

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 = &num;

  printf("%d,%p\n",num,p);

  getchar();
  return 0;
}

3. *指針 就如同變量本身是一樣的:

#include <stdio.h>

int main(void)
{
  int num = 10;
  int *p = &num;

  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語言 - 目錄”

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