zoukankan      html  css  js  c++  java
  • C语言 指针

    指针            :   地址 的代名词  ,  在32位系统中,指针就4个字节;

    指针变量     :   存放指针这个概念的盒子

    指针每次读取的数据大小,取决于定义指针的数据类型;(int  *p  ;  char  *p)

    #include "stdio.h"
    int a=0x213432;
    int *p1;
    void main()
    {
      p1=&a;
      printf("%x
    ",*p1);
    }

    结果:213432
    int a=0x213432;
    
    char *p1;
    
    void main()
    {
    
      p1=&a;
      printf("%x
    ",*p1);
    }

    编译会出现警告warning: assignment from incompatible pointer type,
    结果为32.
    
    

      

     

    指针+修饰符

    • const  常量,只读【不能变】  

                                 char *p;

                                 const char *p;   p可以指向任意空间,但不希望改变其中的内容(与char const *p相同 )

                                 char * const p        :     p一旦被赋值,将永远指向这个地址,但内容可以改变(与 char *p const相同 )   硬件资源

                                 const  char * const  p     :  ROM



    • volatile  防止优化指向内存地址

                                volatile  char *p

    • typedef        别名

                               

    指针+运算符

    • 加减运算        指针的加法/减法运算,实际上是增加一个单位(由定义指针的数据类型控制,大小可以使用   sizeof  (p[0])  )

                              int *p = xxx   [0x12]

                              p+1        [0x12+1*(sizeof(*p))]    

                               p++  p--   :更新地址  

    • 【】        变量名【n】

                n :  ID  标签      地址内容的标签访问方式    取出标签内存 里的值

                             适用于跳跃式访问,非线性

     1 #include"stdio.h"
     2 
     3 void main(){
     4 
     5 int a= 0x12345678;
     6 int b= 0x81234548;
     7 
     8 int *p1 = &b;
     9 char *p2 = (char *)&b;
    10 
    11 printf("the p1+1 is %x,%x,%x
    ",*(p1+1),p1[1],*p1+1);
    12 
    13 printf("the p2+1 is %x
    ",p2[1]);
    14 }

    结果为:
    the p1+1 is 12345678,12345678,81234549
    the p2+1 is 45
    • 逻辑操作符

                       >=   <=   ==      !=

                       *p1>*p2             地址中的内容的比较

                       常用: ----------------------   ==    !=

                                         1.跟一个特殊值进行比较   0x0 :地址的无效值,结束标志。   一般用 NULL表示0

                                         2.指针必须式同类型的比较才有意义,

    多级指针

                        存放地址的地址空间。(主要强调一个       联系      )   char **p   (第二个* 修饰p,表示为指针,char修饰第一个*,表示二级指针的操作单位),指针结束条件为空。eg:   while (p[m] != NULL)

     

  • 相关阅读:
    sql2005 如何重启数据库服务
    jQuery 树控件 zTree
    谈C#中的Delegate
    微博首席架构师杨卫华:新浪微博技术架构分析(转)
    jqGrid 各种参数 详解
    asp.net(c#)ref,out ,params的区别
    gcc
    数据结构递归
    跳表
    javajvm
  • 原文地址:https://www.cnblogs.com/chu-yi/p/9762072.html
Copyright © 2011-2022 走看看