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

C語言--指針,--指針

編輯:關於C語言

C語言--指針,--指針


一、指針

1.指針聲明格式

 1> 格式:變量類型 *變量名。舉例:char *p,定義了一個指針變量p,只能存儲地址

 * 記住*不是指針變量名,只是指針的一個標志

 2> 作用:指針就一個作用,存儲地址,並且根據地址值訪問對應的存儲空間

 3> 例子

1 int main() 2 { 3 int a = 90; 4 int *p ; 5 p = &a; 6 return 0; 7 } 指針代碼

 * 代碼在內存中的表示

 * 注意點:① int *p只能指向int類型的數據 ②指針變量為經過初始化,不要拿來間接訪問其    他存儲空間 ③ 不允許這樣寫:*p = &a ,*p代表訪問指針p所指向的存儲空間 ④ 定義變量  是的*僅僅是一個象征,沒有其他特殊含義

二、指向指針的指針

1.舉例

  char a='A';

  char *p = &a; // 指向char類型存儲空間的指針

  char **pp = &p; // 指向指針的指針

  char ***ppp = &pp; // 三級指針(不經常用)

 

2.指針應用

 1> 實現調用一個函數,得到多個返回值

1 #include <stdio.h> 2 3 int sumAndMinus(int num1, int num2, int *num3) 4 { 5 *num3 = num1 - num2; 6 return num1 + num2; 7 } 8 9 10 int main() 11 { 12 int a = 12; 13 int b = 8; 14 int minus; 15 int sum = sumAndMinus( a, b, &minus); 16 return 0; 17 } 多返回值

3.指針占用內存

 * 指針占用內存與具體編譯器有關,在Xcode中任何類型指針占用8個字節

三、指針與數組

1.數組的遍歷

 //利用下標進行遍歷

 int nums[3] = {1,2,3,}

 for(int i = 0;i < 3; i++)

  {

   printf("%d\n", nums[i]);

  }

2.利用指針對數組進行遍歷

 int nums[3] = {1,2,3,};

 int *p = &nums ;

 //指針p指向數組的首元素地址;

 //(p+1)指向 nums[1];

 for(int i = 0;i < 3; i++)

  {

   printf("%d\n", *(p+i));

   printf("%d\n", p[i ]);

  }

四、指針與字符串、指針數組

1.字符數組與字符串的比較

 char c1[] = "name";

 //上面這行代碼表示的是字符數組,所表示的是字符串變量

 char *c2 = "name";

 //上面這行代碼。指針變量c2指向的是字符串首字母。它表所表示的是字符串常量

 //兩行代碼的不同,也與數據在內存中的存儲有關

 char *c3 = "name";

 //注意:c2與c3所便是的是同一個地址

2.定義字符串的兩種方式

 1> 利用數組

 char c[] = "name";

 //特點:字符串裡面的字符是可以修改的

 //使用場合:字符串的內容需要經常修改

 2> 利用指針

 char *c = "name";

 //特點:字符串其實是一個常量字符串,裡面的字符是不能修改的

 //使用場合:字符串的內容不需要修改,而且這個字符串經常使用

3.指針數組

 1> 指針數組的定義

 char *name[3] = {"jack", "rose", "tom"};

 2> 字符串的輸入

 //新建一個字符數組,用來保存用戶輸入的字符串

 char name[20];

 // 數組名就表示數組首元素的地址

 scanf("%s", name);

五、指向函數的指針與返回指針的函數

 1.返回指針的函數

 char *test()

 {

  return  "name";

 }

 int main()

  {

   char *p = test();

   return 0;

  }

2.指向函數的指針

void test()

{

  printf("調用了test函數");

}

int main()

{

  //(*p)是固定寫法,代表指針變量p將來肯定是指向函數

  //左邊的void :指針變量P指向的函數沒有返回值

  //右邊的():指針變量p指向的函數沒有形參

  void (*p)();

  //函數名就是函數地址

  p = test;

  //函數調用的三 種方式

  (*p)();// 第一種方式:直接調用

  test();// 第二種方式:利用指針調用

  p();//第三種方式:利用指針調用

  return 0;

}

 

 

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