指针问题及由此引出的问题
sxrj 2003-08-23 04:44:41
对于指针我还想搞得更明白一些,于是又有了新的问题:
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位数,但它使用实际数据的长度。仅仅是格式上的区别,没有什么本质上的区别,当然由于我的测试带有个人的片面性,肯定有不正确的地方,得出的结论也肯定有问题,希望能够得到指正。