指针

作者: Laughingg | 来源:发表于2016-07-29 13:32 被阅读20次
// 定义一个 int 类型的 a 变量并赋值为 10
int a = 10;

// 定义一个 int 类型的指针 p
int *p;

// & 的操作是取地址, &a 表示获取 a 变量存储空间的首地址 。 最后将获取的地址值赋值给指针。
p = &a;

// * 表示访问 指针 指向的存储空间, *p 表示获取 p 指针指向的存储空间并将存储空间的值修改 为 100
*p = 100;


Int *p;  和 *p = 100; 的区别:
Int *p 的 * 起标识作用,表明定义的p是一个指针。
*p = 100 的 * 表示通过访问p指向的地址空间


NSLog(@"%d", a);

打印结果: 
2016-07-29 12:50:05.958 runtimeDemo[78195:7517694] 100

指针只能存储地址值,通过指针可以对指针指向的内存进行空间进行存取操作。

指针使用注意点:

 Int *p;
double d=10.0;
p=&d;
// 不建议此种做法
p 可以操作的内存空间和 d 实际的内存空间不匹配。容易造成内存操作的错误。
Int *p;
p=200;
//指针变量只能存储地址
Int *p;
printf(“%d\n”,*p);
//指针变量未经初始化,不要拿来间接访问其他的存储空间
Int *p=&a;但是不能写成 int *p;*p=&a;这种写法没有任何的意义,可以认为*是和类型符一起使用的。
*是指针运算符,访问指针指向的空间

指针在数组中的使用

// 定义一个 ages 数组, ages 变量其实就是一个指针,指向的是 age[0] 的地址。(也可以理解为 ages 指向的是 ages 数组整体存储空间的首地址)
int ages[5]={10,9,8,7,6};

// 使用数组访问的方式直接进行数组内存的访问
for (int index = 0; index < 5; index ++) {
    NSLog(@"%d", ages[index]);
}

// 定义一个 int 类型的指针
int *d;

// 将 ages 的内存地址赋值给 d
d = ages;

// 使用指针来进行数组内存的访问
for (int index = 0; index < 5; index ++) {

    NSLog(@"%d", *(d + index));

    //  这一句和上面两句的意思是一样的。
    //        NSLog(@"%d", d[index]);
}

*d  == d[0]
*(d + 1) == d[1]
*(d + 2) == d[2]
*(d + 3) == d[3]

在某种意义上来说可以简单的将指针当做数组来使用。

指针在结构体中的使用

struct stu{
    int num;
    char *name;
    char sex;
    float score;
} *ps, boy[5]={
    {101, "Zhou ping", 'M', 45},
    {102, "Zhang ping", 'M', 62.5},
    {103, "Liou fang", 'F', 92.5},
    {104, "Cheng ling", 'F', 87},
    {105, "Wang ming", 'M', 58}
};

// ps 为指向 stu 结构体的指针。
// boy 为 stu 结构体的数组。

int main(){
      

      /*
        boy 默认指向的是 boy[0] 的地址值。
        ps = boy 是 ps 指向 boy[0] 的地址值
        boy+5  = boy[4] 的地址值

      */    
      for(ps=boy; ps<boy+5; ps++) {
          printf("%d\t%s\t%c\t%f\t\n", ps->num, ps->name, ps->sex, ps->score);
      }
      return 0;
}


->  是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。
换种说法,如果我们在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到“->”。
(*p).a,和p->a完全等效

** 关于指针 ++ 或者 + 1 的说明 **
指针加 1 表示的是指针移动一个指针类型的内存大小。不是单纯的数组加 1 操作。
声明一个 int 类型的指针指向 char 类型的变量。在进行指针操作的时候就出现错位。

相关文章

  • 混淆知识点

    1、指针数组&数组指针、常量指针&指针常量、函数指针&指针函数 数组指针&指针数组 数组指针的定义 int (*p...

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • 指针

    普通指针指针的指针 数组指针 函数指针

  • 函数指针

    概念: 指针函数, 函数指针, 指针数组, 数组指针, 指向数组的指针, 指向函数指针数组的指针。

  • C:函数指针的坑

    关于该死的函数指针和指针函数 先来个目录 常量指针、指针常量 数组指针、指针数组 函数指针、指针函数 1、先看第一...

  • C 语言指针

    指针类型:指针的读取长度,指针的读取方向(大小端) 空指针,无类型指针,野指针 常量指针,指向常量的指针 http...

  • 二、C语言基础

    A、指针 指针的概念:指针变量 和 指针 的区别 ?答:指针变量是指针的标记,也可以通过指针变量的标记操作指针内存...

  • 王道程序员求职宝典(十一)指针与引用,树

    指针与引用 指针声明typedef别名类型检查void*指针指向指针的指针函数指针typedef简化函数指针定义初...

  • NDK02

    指针 指针概念 1 .指针变量和指针的区别?答: 指针变量是定义指针的标记,指针就是指向的内存地址。2 .函数指针...

  • 12 C指针

    1、指针定义 2、指针进阶 3、指针使用 4、多级指针 4、指针和数组 5、指针和字符串 6、高级指针之和指向函数的指针

网友评论

      本文标题:指针

      本文链接:https://www.haomeiwen.com/subject/gcdzjttx.html