zoukankan      html  css  js  c++  java
  • printf()

    #include <stdio.h>

    int main(void)

    {  

       int x;  int *p1,*p2;

       p1 = &x;  

       p2 = p1;

       printf(" %p ",p2); /* print the address of x,not x's value */

       return 0;

    }

    %a           浮点数、十六进制数字和p-记数法(C99)
    %c     一个字符 
    %d    有符号十进制整数 
    %e    浮点数、e-记数法

    %E           用科学计数法表示的浮点数(同%e)
    %f     浮点数、十进制记数法 

    %F    浮点数、十进制记数法(同%f)
    %g    根据数值不同自动选择%f或%e.
    %i            有符号十进制数(与%d相同)
    %o    无符号八进制整数
    %p    指针    
    %s    字符串
    %u      无符号十进制整数
    %x    无符号十六进制整数,并以小写abcdef表示 

    %X    无符号十六进制整数,并以大写ABCDEF表示
    %%    打印一个百分号 

      任何变量都有地址,变量名指向它的内容(指针的内容是地址或者非指针类型内容可能是char int等),取地址一般得加&,可以通过%p打印出来,而指针特殊在他本身内容是地址,为此,打印%p的时候呢,如没有加&是打印的指针的内容(存的地址),而按照区地址一般加&的原则来打印指针的时候呢,打印的是指针的地址而不是其内容地址。
    实践:

    #include <stdlib.h> #include <stdio.h>

    int main(void)

    {

      int a=8;

      int *p;

      int *p2;  

      printf("%p ",&a);  

      p=&a;  

      printf("%p ",p);

      printf("%p ",*p);  

      p2 = p;  

      printf("%p ",p2);

      printf("%p ",p2);  

      printf("p=%p ",&p);

      printf("p2=%p ",&p2);

      printf("%d ",*p2);    

      return 0;

    }

    问:如果想打印p指针本身的地址,如何弄?
    答:printf("%p",&p);
    问:p2=p是如何赋值的?
    答:p的指针内容(里面存的是个地址)赋给p2。
    问:p,p2存储的内容(地址)相同,它们两个的地址相同?
    答:不同,可以通过打印他们的地址:printf("%p",&p); printf("%p",&p2); 来对比一下。       

    格式控制符“%p”中的p是pointer(指针)的缩写。指针的值是语言实现(编译程序)相关的,但几乎所有实现中,指针的值都是一个表示地址空间中某个存储器单元的整数。printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x。

    示例:

    int i = 1;

    printf("%p",&i);

    相当于

    int i = 1;

    printf("0x%x",&i);

    对于32位的指针,输出一般会是类似0xf0001234之类的结果。

      %p存在的理由除了附加前缀输出的便利性以外,指针的大小是不确定的,由实现决定。根据地址空间的大小,一般有16位、32位、64位的指针。尽管目前32位平台上的指针一般全是32位的,但旧的一些平台上可能有多种长度的指针(例如非标准的near、far、huge修饰的pointer)混用,无法用%x、%lx、%hx、%llx(对应int、long、short、long long)中的任意一种保证能输出所有类型的指针。

     

    参考链接:http://bbs.csdn.net/topics/330107443

  • 相关阅读:
    Mobile GMaps - Google Map移动版
    365Key今天不能用了,感觉不爽
    推荐:对个人免费的杀毒软件[avast!]
    向 Visual Studio 2005 Tools for Office 迁移时,将 VBA 代码转换为 Visual Basic .NET
    令人向往的3000年生活(转载)
    也说技术人员创业
    痛恨3721的朋友们,装个avast! Antivirus吧
    很Cool很全的Google Map的应用
    关于.net的企业应用开发
    天天网摘(20050704)
  • 原文地址:https://www.cnblogs.com/followyourdream/p/3328519.html
Copyright © 2011-2022 走看看