zoukankan      html  css  js  c++  java
  • 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 }

  • 相关阅读:
    串口通信理论知识
    串口通信基础
    串口中断程序步骤及代码
    Django之CRM项目Day6-公私户转换问题解决 班主任功能
    Django之CRM项目Day5-跳转页面 跟进记录 报名记录
    Django之CRM项目Day4-编辑客户 公私户 模糊查询
    Django之CRM项目Day3-客户展示及分页
    Django的ModelForm
    Django相关面试题
    Django基础自测
  • 原文地址:https://www.cnblogs.com/darren-pty/p/14197903.html
Copyright © 2011-2022 走看看