• 6-C指针


    (1)指针定义的理解

    ① 指针,存放内存地址的变量,长度固定,32位系统中长度为4,说白了就是寻址位数。
    ② 指针也是变量,那么免不了被存取,当然就会有存放此指针的地址,用&p获取;

    1  int i=10;
    2  int *p_t=&i;
    3  
    4  int main()
    5  {
    6      printf("0x%p,0x%X
    ",p_t,&i);//指针变量存放的i变量的地址值
    7      printf("%x
    ",*p_t);//指针所指向的 内存的数据
    8      printf("%x
    ",&p_t);//指针变量本身的地址
    9  }

     

    (2)指针p[-1]代表什么?

    int num[10] = {0,1,2,3,4,5,6,7,8,9};
    int *p = num+2;//此时p代表的是num[2]的地址,p[0]就是num[2],p[-1]就是num[1],p[-2]就是num[0]; 但是p[-3]就错了,因为你访问了一个未知的地址,会出现严重错误的。

    (3)数组名的理解

    int a[10];  其中a是数组名,数组首元素的地址。

    下面两种情况数组名代表整个数组的地址:

    ① sizeof(a) = 10*4 表示整个数组在内存中的大小;

    ② &a 取出来的值是和第一个数组元素地址一致(sizeof(&a)=4),但是其偏移量不是一个元素的大小,而是整个数组的大小;

    (4)同一个数组的指针相减,得到的是他们之间元素的个数。

    &p[4][2] - &a[4][2] = &a[3][3] - &a[4][2]

    &p[4][2]:    &a[0][0]+sizeof(int)*3*5 + 3*sizeof(int)

    &a[4][2]:    &a[0][0]+sizeof(int)*4*5+2*sizeof(int)

    如果直接用&p[4][2] - &a[4][2] 相减得到的是 -4 * sizeof(int) = -16, 但是对于同一个数组的指针相减,虽然两者的地址相差16,所得到的是他们之间元素的个数

    所以十进制打印出来的结果是 -4。

     1 int main()
     2 {
     3     int a[5][5];
     4     int (*p)[4];
     5 
     6     p = a;
     7     printf("%d, %p,%p",(&p[4][2]) - (&a[4][2]),&p[4][2],&a[4][2]);
     8 
     9     return 0;
    10 }

  • 相关阅读:
    TP5.0防跳墙访问
    TP5.0上传添加数据库
    抽象类与接口
    instanceof 关键字
    abstract 抽象类
    extends 继承
    单例模式
    类的加载过程和对象的创建
    静态成员变量和非静态成员变量的区别
    this关键字
  • 原文地址:https://www.cnblogs.com/darren-pty/p/14197903.html
Copyright © 2020-2023  润新知