当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: sqldatareader 和dataset 想把他写道一个类里(c#), 在asp.net的窗体里, 怎么样来调用? 例如: fetchdata_sdk.cs sqldatareader fetchreader ( string query, string db ) { // connect to data source sqlconnection myconn = new sqlcon......
 ·url的问题    »显示摘要«
    摘要: 有的时候看到一些url中有2条"//"是怎么回事,如: http://www.abc.com/efg//hij/klm/ 不是指跟协议后面的那2条 ......


指针问题及由此引出的问题

 
  对于指针我还想搞得更明白一些,于是又有了新的问题:  
  NODE   *u  
  u=(NODE   *)malloc(sizeof(NODE))  
          此处申请了一个大小是NODE的内存空间  
  int   *b  
  b=(int   *)malloc(sizeof(int)   *   (m+1));              
          此处m=5,但我不知道sizeof(int)后边的   *   (m+1)应当怎么理解?它到底申请了多大的内存空间?*   (m+1)在此处的功用是什么?  
   
  程序  
  int   i[]={1,5,9};  
    int   *q;  
    q=i;  
    printf("%d",*q);  
    printf("   \n   %d",q);  
    printf(   "\n   %d",&q);  
    printf   ("\n   %p",q);  
    printf("\n   %p",&q);  
    printf("\n   %X",q);  
    printf("\n   %X",&q);  
  输出:  
  1  
    -44  
    -38  
    FFD4  
    FFDA  
    FFD4  
    FFDA  
   
          我的问题是使用&以后和不使用&到底输出的是什么,那个才是内存地址?二者有没有关系,似乎它们有个相对比较小的差值。  
          使用P是输出指针的值,而这个值应当是内存地址的值对吗?如果说它们是内存地址,那么用X也是输出内存地址了,对吗?另外P与X两个输出格式参数之间有什么关系?当然我知道X是输出无符号以十六进制表示的整数,P是输出指针的值,我的本意是此处它们有什么区别,它们本质区别又是什么?关于这个问题我又进行了如下测试,不知能否在回答上边问题以后再把以下输出结果分析一下?  
  int   a=3;  
  printf("%p   \n",a);  
  printf("%p   \n",&a);  
  printf("%x   \n",a);  
  printf("%x   \n",&a);  
   
  0003  
  FFDA  
  3  
  ffda  
   
          当然这些输出格式的参数不应当如此使用,在此我完全是希望能够正确区分两个参数的功用。   最后写一句,由于我还进行了别的测试,测试例子太杂,我没有都写出来,个人感觉是P是输出了一个标准的4位长度数的16位数,首位不足补零,而X也是输出16位数,但它使用实际数据的长度。仅仅是格式上的区别,没有什么本质上的区别,当然由于我的测试带有个人的片面性,肯定有不正确的地方,得出的结论也肯定有问题,希望能够得到指正。  
           
 

NO.1   作者: steedhorse

b=(int   *)malloc(sizeof(int)   *   (m+1));    
  那显然是申请了m+1个整数大大小的空间啊,如果在32位系统中,sizeof(int)为4,所以就相当于:  
  b   =   (int*)malloc(24);  
  显然这块空间可以装下6个整数,因此在效果上可以当作  
  int   b[6];  
  来使用。  
   
  p是个指针变量,输出p就是输出这个指针指向的地址的值,而指针变量的值就是它指向的地址的值。  
  指针变量本身也是个变量,只要是变量,那么它本身也需要有内存空间来保存它的值,而&p就是这块内存的地址。  
  在这一点上,指针变量和数组名是不同的。比如说,  
  int   a[6];  
  那么a和&a是一样的,原因是数组名仅仅是个常地址,而不是个指针变量,C/C++规定&a和a含义相同。  
   
  我觉得"%p"和"%x"的区别很小,原因是大家习惯于用16进制来显示地址,而不是10进制或8进制。"%x"是输出16进制数,而"%p"是按一种大家习惯的标注格式来显示16进制数,即固定4位16进制数,a到z大写,也就是说,"%p"相当于"%04X"。

NO.2   作者: Healer

b=(int   *)malloc(sizeof(int)   *   (m+1));              
  这个通常用来处理地址连续的线性表,   用处不大。  
  和一楼的老大说的是一样的,   数组就是一种线性表,。

NO.3   作者: hellobcb

优先级:++>*>+


 ·出问题了是否是病毒    »显示摘要«
    摘要: 鼠标移动到当前窗口外边,标题栏就变成了灰色, ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE