首页 > 代码库 > 黑马程序员----指针

黑马程序员----指针

指针:

  • 格式:

    变量类型  *变量名;  如:int *p;

  • 注意点:

1.指针变量只能存储地址;

2.指针就一个作用,能够根据一个地址值,访问对应的存储空间;

3.指针变量p前面的int,代表p只能指向int类型的数据;

  • 注:

在64位编译器中,指针变量都是占用8个字节,但是为什么还要分为:char *p; int *p;等,是因为在取值时,*p会从p存储的地址开始,取一定的字节(如:int就会从p所存储的地址开始向下4个字节)

 

一、指针的基本使用

例:

int *p; // 定义了一个指向int类型数据的指针变量p

int a = 90; // 定义了一个int类型的数据a = 90

p = &a; // &a :取得变量a的地址,并且赋值给指针变量p

*p = 10; // 对p所指向的存储空间赋值(*)

解析:a = 90   -->   10;

注意点:

   int *p; 中的*和*p = 10;中的*意思是不一样的;

   int *p;中的*代表一个指针变量(标志)

   *p = 10;中的*代表对p指向的存储空间进行赋值

代码练习一:

技术分享

运行结果:

技术分享

 

二、指针变量的使用注意

  • 注意点一:

   // 不建议这样写 int *p 只能指向int类型的数据    // 警告: warning: incompatible pointer types assigning  to ‘int *‘ from ‘double *‘ [-Wincompatible-pointer-types]    int *p;        double a = 10.0;        p = &a;

 

  • 注意点二:

   // 指针变量只能存储地址    // 警告(warning: incompatible integer to pointer   conversion assigning to ‘int *‘ from ‘int‘ [-Wint-conversion])    int *p;    p = 200;

 

  • 注意点三:

   // 指针变量未经过初始化,不要拿来间接访问其指向的存储空间(不明确)    // 没有警告、输出0    int *p;        printf("%d\n", *p);

 

  • 注意点四:

// 定义变量时的*仅仅是一个象征,没有其他特殊含义    int a = 9;    int *p = &a; // 定义变量时的*仅仅是一个象征,没有其他特殊含义        // *p = &a; // 不正确的写法  
          // 报警(warning: incompatible pointer to integer
                conversion assigning to ‘int‘ from ‘int *‘; remove & [-Wint-conversion])
p = &a; *p = 20; // 这里的*的作用:访问(赋值)指针变量p指向的存储空间 printf("%d\n", a);

 

  • 代码练习:

技术分享

 运行结果:

技术分享

 
 
 
 

黑马程序员----指针