C语言_指针

来源:互联网 发布:编程语言有什么用 编辑:程序博客网 时间:2024/05/22 09:14
//***** 指针 *****//***** 指针变量 *****void test1(){    int i = 100;    int *p = NULL;    p = &i;    printf("i:%d\n",*p);    /*    int *p 定义一个整形指针变量    p = &i 把i的地址赋给指针变量    指针就是存放别的变量的地址    */}//***** 指针操作 *****void test2(){    int i = 100;    int *p = NULL;    p = &i;    *p = 101;    printf("i:%d\n",*p);    /*    *p 访问指针p指向的数值    */}//***** 空指针 *****void test3(){    int *p;    p = NULL;    /*    p = NULL,NULL是一个宏,代表0,也就是该指针变量为0    指针是一个变量,那变量如何没有在定义时进行初始化,那系统就会给该指针变量一个随机值,所有我们必须指针变量赋为空    */}//***** 指针变量更改 *****void test4(){    int a = 100;    int b = 200;    int *p = NULL;    p = &a;    printf("a:%d\n",*p);    p = &b;    printf("b:%d\n",*p);    int i = 300;    p = &i;    printf("p保存的地址:0x%p\n",p);    p ++;    printf("p保存的地址:0x%p\n",p);    p --;    printf("p保存的地址:0x%p\n",p);    p = p - 2;    printf("p保存的地址:0x%p\n",p);    /*    既然指针变量是一个变量,变量可以赋值,可以加减,可以比较大小,那指针变量也是可以的    p ++ 其实就是p + sizeof(int) * 1    p -- 其实就是p - sizeof(int) * 1    p = p - 2 其实就是p = p - siezeof(int) * 2    */}//***** 指针自身地址 *****void test5(){    int a = 100;    int *p = NULL;    p = &a;    printf("p保存的地址:0x%p\n",p);    printf("p自身的地址:0x%p\n",&p);    printf("p指向的变量:%d\n",*p);    /*    指针既然存放的是别的地方的指针,但它自己也是存放在内存中的,那它自身也是有内存地址的    p一旦定义了,编译器就会自动在栈中开辟一块内存存放指针p    */}//***** 指针类型 *****void test6(){    int a = 100;    int *p1 = NULL;    p1 = &a;    float b = 15.0f;    float *p2 = NULL;    p2 = &b;    printf("a:%d\n",*p1);    printf("b:%f\n",*p2);    /*    指针类型和指针指向的变量的类型是两个不同的概念,整形指针只能指向整形变量,浮点型指针只能指向浮点型变量    两者类型必须匹配    */}//***** 常量指针const *****void test7(){    int a = 100;    int *const p = &a;    //p ++;  // 由于指针是常量指针,假如p ++操作,将会出错    *p = 103;  // 由于指针指向的数值不是常量,所以可以修改指向的数值的值    printf("p保存的地址:0x%p\n",p);    printf("p指向的数值:%d\n",*p);    /*    常量const指针,就是指针不可变,常量指针只能定义时初始化    */}//***** 指向常量的指针 *****void test8(){    int a = 100;    const int *p = &a;    p ++;  // 由于指针p不是常量指针,所以可以p ++    //*p = 103;  // 由于指针p指向的数值是常量,所以不能更改指针p指向的常量    printf("p保存的地址:0x%p\n",p);    printf("p指向的数值:%d\n",*p);    /*    指针指向的是常量,所以指针指向的数值不可以改变    */}//***** 指向常量的常指针 *****void test9(){    int a = 100;    const int *const p = &a;    //p ++;  // 由于指针是常量指针,假如p ++操作,将会出错    //*p = 103;  // 由于指针p指向的数值是常量,所以不能更改指针p指向的常量    printf("p保存的地址:0x%p\n",p);    printf("p指向的数值:%d\n",*p);}

0 0