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

    指针变量被赋某个变量的地址或0。

    指针变量赋初值有三种情况:
    1).用取地址运算符"&"将变量地址赋给指针变量。如:p=&a;
    2).将一个指针变量中的地址赋给另一个指针变量,如:p1=p;
    3).给指针变量赋空值0,如q=0;表示该指针变量不指向任何变量。

    程序举例如下:

    #include <stdio.h>
    int main( int argc, char *argv[])
    {
      int var =20;
      int n[2]={10,18};
      int *a1 ;
      int *a2;
      int *a3;
      int *a4;
      
      a1 = &var; 
      a2 = n; 
      a3 = 0x0000000000;
      a4 = 0; 
             
      printf("int 存储大小 : %lu 
    ", sizeof(int));
     
      printf("value of %p
    ",a1);
      printf("value of %p
    ",a2);
      printf("value of %p
    ",a3);
      printf("value of %p
    ",a4);
        
      printf("value of %d
    ",*a2);
    
    /*指令格式:<指针变量>++;
    指针变量自加运算是将指针变量指向下一个元素的运算。当计算机执行 <指针变量>++ 指令后,指针变量实际增加值为指针变量类型字节数,即
    <指针变量>=<指针变量>+sizeof(<指针变量类型>)。
    例如实际例子a2的首地址为1000,那么a2++之后的地址为1004.
    */
        
    //  printf("value of %p
    ",++a2);//先计算,后引用
      printf("value of %p
    ",a2++);  //先引用,后计算
      printf("value of %p
    ",a2);
    
      printf("value of %p
    ",*a1);
      printf("value of %p
    ",*a2);
    
      printf("value of %d
    ",*a1);
      printf("value of %d
    ",*a2);
    
      return 0;
    }

    运行结果如下:

    [zsd@TOMCAT ~]$ gcc ./test01.c  -o test01
    [zsd@TOMCAT ~]$ ./test01 
    int 存储大小 : 4 
    value of 0x7fff8e0aa7a4
    value of 0x7fff8e0aa790
    value of (nil)
    value of (nil)
    value of 10
    value of 0x7fff8e0aa790
    value of 0x7fff8e0aa794    (由于int类型,是4个字节,所有指针++,代表一个位置为0x7fff8e0aa7940x7fff8e0aa790多4,这个4正好是int类型的字节数)
    value of 0x14
    value of 0x12
    value of 20
    value of 18
  • 相关阅读:
    开源ITIL管理软件iTop 2.5-2.6安装
    并发服务器
    套接字通信
    libevent
    gdb调试
    值得收藏的技术社区
    关于博客园随笔编辑页面内容不刷新(空白)的问题解决
    嵌入式Web框架
    内存地址的传递问题
    linux文件缓冲区
  • 原文地址:https://www.cnblogs.com/zhangshengdong/p/9856287.html
Copyright © 2011-2022 走看看