A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 hanxujie 于 2015-7-20 21:37 编辑

指针类型

1.变量的定义

int *p;

    // 变量类型  变量名;

    // 格式:变量类型 *变量名;

    // 定义了一个指针变量p

    // 指针变量只能存储地址

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

    // 指针变量p前面的int:指针变量p只能指向int类型的数据

2.间接操作变量的值

int a = 10;

p = &a;

*p = 20;

3.指向结构体的指针的定义:


struct Student *p;

利用指针访问结构体的成员

1> (*p).成员名称

2> p->成员名称

4.指针的使用注意:

1)不建议的写法, int *p只能指向int类型的数据


2)指针变量只能存储地址

3)指针变量未经过初始化,不要拿来间接访问其他存储空间


4)定义变量时的*仅仅是一个象征,没有其他特殊含义
5.指针和数组:

#include <stdio.h>


/*

1.数组元素的访问方式

int ages[5];

int *p;

p = ages;

1> 数组名[下标]  ages

2> 指针变量名[下标] p

3> *(p + i)


2.指针变量+1,地址值究竟加多少,取决于指针的类型

  int *   4

  char *  1

  double * 8

*/

void change(int array[]);

int main()

{

    // 20个字节

    int ages[5] = {10, 11, 19, 78, 67};


    change(ages);


    return 0;

}


// 利用一个指针来接收一个数组,指针变量array指向了数组的首元素

void change(int *array)

{

    printf("%d\n", array[2]);

    //printf("%d\n", *(array+2));

}


/*

void change(int array[])

{

    int s = sizeof(array);


    printf("%d\n", s);

}*/

void test()

{

    double d = 10.8;

    double *dp;

    dp = &d;


    printf("dp = %p\n", dp);

    printf("dp + 1 = %p\n", dp + 1);


    int ages[5] = {10, 9, 8, 67, 56};


    int *p;

    // 指针变量p指向了数组的首元素

    p = &ages[0];

    // 数组名就是数组的地址,也是数组首元素的地址

    //p = ages;


    /*

     p ---> &ages[0]

     p + 1 ---> &ages[1]

     p + 2 ---> &ages[2]

     p + i ---> &ages

     */


    //printf("%d\n",  *(p+2));


    printf("%d\n",  p[2]);


    /*

     for (int i = 0; i<5; i++) {

     printf("ages[%d] = %d\n", i, *(p+i));

     }*/

    //    printf("%p\n", p);

    //    printf("%p\n", p + 1);

    //    printf("%p\n", p + 2);

}

6.指针和字符串

char *name = "itcast";

  * 特点:字符串其实是一个常量字符串,里面的字符是不能修改

  * 使用场合:字符串的内容不需要修改,而且这个字符串经常使用


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马