第26课 指针的本质分析

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

下面的程序输出什么?

运行结果如下:

i的值发生了改变,但是在程序中,我们没有直接修改i的值,这就是因为指针的操作,通过指针我们改变了i的值。

*号的意义

小贴士:

指针的使用示例:

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int i = 0;
 6     int* pI;
 7     char* pC;
 8     float* pF;
 9     
10     pI = &i;
11     
12     *pI = 10;
13     
14     printf("%p, %p, %d
", pI, &i, i);
15     printf("%d, %d, %p
", sizeof(int*), sizeof(pI), &pI);
16     printf("%d, %d, %p
", sizeof(char*), sizeof(pC), &pC);
17     printf("%d, %d, %p
", sizeof(float*), sizeof(pF), &pF);
18     
19     return 0;
20 }

运行结果如下:

传值调用与传址调用:

利用指针交换变量:

 1 #include <stdio.h>
 2 
 3 int swap(int* a, int* b)
 4 {
 5     int c = *a;
 6     
 7     *a = *b;
 8     
 9     *b = c;
10 }
11 
12 int main()
13 {
14     int aa = 1;
15     int bb = 2;
16     
17     printf("aa = %d, bb = %d
", aa, bb);
18     
19     swap(&aa, &bb);
20     
21     printf("aa = %d, bb = %d
", aa, bb);
22     
23     return 0;
24 }

运行结果如下:

常量与指针:

程序示例:

#include <stdio.h>

int main()
{
    int i = 0;
    
    const int* p1 = &i;
    int const* p2 = &i;
    int* const p3 = &i;
    const int* const p4 = &i;
    
    *p1 = 1;    // compile error
    p1 = NULL;  // ok
    
    *p2 = 2;    // compile error
    p2 = NULL;  // ok
    
    *p3 = 3;    // ok
    p3 = NULL;  // compile error
    
    *p4 = 4;    // compile error
    p4 = NULL;  // compile error
    
    return 0;
}

编译器报错结果如下:

小结:

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9537938.html