第26课 指针的本质分析

1. 变量的回顾

  程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段内存空间呢?------------可以通过变量名访问存储空间

 

2.  *号的意义

(1)在指针声明时*号表示所声明的变量为指针

(2)在指针使用时*号表示取指针所指向的内存空间中的值

      

  ①*号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值。

  ②变量p保存着变量i内存地址,即p==&i, *p==i

 

【实例分析】指针使用示例

 1 #include <stdio.h>
 2 
 3 int main()
 4 
 5 {
 6 
 7     int i = 0;
 8 
 9     int* pI;
10 
11     char* pC;
12 
13     float* pF;
14 
15    
16 
17     pI = &i;
18 
19    
20 
21     *pI = 10;
22 
23    
24 
25     printf("%p, %p, %d\n", pI, &i, i); //p == &i
26 
27     printf("%d, %d, %p\n", sizeof(int*), sizeof(pI), &pI);
28 
29     printf("%d, %d, %p\n", sizeof(char*), sizeof(pC), &pC);
30 
31     printf("%d, %d, %p\n", sizeof(float*), sizeof(pF), &pF);
32 
33    
34 
35     return 0;
36 
37 }

 

3. 传值调用传址调用

(1)指针变量,因此可以声明指针参数

(2)当一个函数体内部需要改变实参的值,则需要使用指针参数

(3)函数调用时,实参值将复制到形参

(4)指针适用于复杂数据类型作为参数函数

 

【编程实验】利用指针交换变量

 1 #include <stdio.h>
 2 
 3  
 4 
 5 int swap(int* a, int* b)
 6 
 7 {
 8 
 9     int c = *a;
10 
11    
12 
13     *a = *b;
14 
15    
16 
17     *b = c;
18 
19 }
20 
21  
22 
23 int main()
24 
25 {
26 
27     int aa = 1;
28 
29     int bb = 2;
30 
31    
32 
33     printf("aa = %d, bb = %d\n", aa, bb);
34 
35    
36 
37     swap(&aa, &bb);
38 
39    
40 
41     printf("aa = %d, bb = %d\n", aa, bb);
42 
43    
44 
45     return 0;
46 
47 }
48 
49  

 

4.常量与指针

(1)几种情况

  ①const int* p;   //p可变,p指向的内容不可变

  ②int const* p;   //p可变,p指向的内容不可变

  ③int* const p;   //p不可变,p指向的内容可变

  ④const int* const p; //p不可变,p指向的内容不可变

(2)口诀:左数右指

  ①当const出现在*号左边时,指针指向的数据为常量

  ②当const出现在*号右边时,指针本身为常量

 

【实例分析】常量与指针

 1 #include <stdio.h>
 2 
 3  
 4 
 5 int main()
 6 
 7 {
 8 
 9     int i = 0;
10 
11    
12 
13     const int* p1 = &i;
14 
15     int const* p2 = &i;
16 
17     int* const p3 = &i;
18 
19     const int* const p4 = &i;
20 
21    
22 
23     *p1 = 1;    // compile error
24 
25     p1 = NULL;  // ok
26 
27    
28 
29     *p2 = 2;    // compile error
30 
31     p2 = NULL;  // ok
32 
33    
34 
35     *p3 = 3;    // ok
36 
37     p3 = NULL;  // compile error
38 
39    
40 
41     *p4 = 4;    // compile error
42 
43     p4 = NULL;  // compile error
44 
45    
46 
47     return 0;
48 
49 }

 

5. 小结

(1)指针C语言一种特别的变量

(2)指针所保存的值是内存的地址

(3)可以通过指针修改内存中的任意地址内容

 

posted @ 2018-12-02 22:55  梦心之魂  阅读(166)  评论(0编辑  收藏  举报