C语言奇妙之旅_指针热身

指针概述

          要正确使用指针, 需要认识指针。 要认识指针, 则需要先知道计算机内存是怎么被划分的, 因为指针是内存数据的快捷方式。

内存地址

        计算机程序中使用的所有数据, 都必须存储在计算机的存储单元中, 并且应能从计算机的存储单元中取出。 每一个存储单元都有唯一的地址。

        计算机内存被划分成安顺序编号的内存单元, 这就是地址。如果程序中定义了一个变量, 在对程序进行编译时, 系统就会给这个变量分配内存单元。

       地址表示在内存中的“位置”, 对象的地址是指对象在内存中的存储位置编号。 

指针变量

 例子

/*
* 编写时间:  2018/7/24
* 编写作者: 流光飞霞
* 程序功能:  指针变量的声明
* 程序版本:  V1.00
**/

# include <stdio.h>

int main()
{
    int i = 88;
    int * p;  /* int *代表只能存放整型地址的变量 p是变量名 */
 
    p = i;  /* 把p指向i */
 
    printf("%d\n", &i);
    printf("%d\n", p);

    return 0;
}

&是取地址符在scanf(); 已经用过了所以第一个输出结果是地址, 第二个输出结果是把p指向了i所以是变量i的值, 也就是p指向谁就是谁的值。

例子_1

/*
* 编写时间:  2018/7/24
* 编写作者: 流光飞霞
* 程序功能:  指针变量的声明
* 程序版本:  V1.00
**/

# include <stdio.h>

int main()
{
    int i = 88;
    int * p;  /* int *代表只能存放整型地址的变量 p是变量名 */
 
    p = &i;
 
    printf("%d\n", &i);
    printf("%d\n", p);  /**/

    return 0;
}

p = &i; 就是p指向了i的地址

错误例子

/*
* 编写时间:  2018/7/24
* 编写作者: 流光飞霞
* 程序功能:  错误的例子
* 程序版本:  V1.00
**/

# include <stdio.h>

int main()
{
    double d = 88.00;
    int * p;  /* int *代表只能存放整型地址的变量 p是变量名 */
 
    p = d;  /* 虽然不能指向 d 不过可以指向 d 的地址 */
 
    printf("%d\n", &d);
    printf("%d\n", p);  /**/

    return 0;
}

/*
*******************************************
error: incompatible types in assignment
*******************************************
*/

为什么不能指向d呢, 因为d是double类型, int *只能存放整型变量的地址!

如何修改

/*
* 编写时间:  2018/7/24
* 编写作者: 流光飞霞
* 程序功能:  错误的例子_改正
* 程序版本:  V1.00
**/

# include <stdio.h>

int main()
{
    int d = 88;  /* 第一种方法把数据类型改成整型 */
    int * p;
 
    p = &d;  /* 第二种方法 指向p的地址 */
 
    printf("%d\n", &d);
    printf("%d\n", p);  /**/

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39637265/article/details/81346441