当前位置:编程学习 > C/C++ >>

C语言指向数组的指针的问题。

#include <stdio.h> #define FORMAT "%d,%d \n" void main(){ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p<a[0]+12;p++){ if((p-a[0])%4==0) printf("\n"); printf("%4d",*p); } printf("\n"); } 上述代码P 最开始等于a[0]那么这个a[0]是一个地址,p<a[0]+12,但是指针加减应该是在内存上移动到下一个单元吧,p最开始等于2000 p+1 应该是 2004才对吧,因为int 占4个字节啊, 这样 if((p-a[0])%4==0) printf("\n"); 不能起到没输出四个换行的作用啊。
答案:printf("%x\n", score + 1);
printf("%x\n", *score + 1);
自己看看差多少

void average(float *p,int n)
这个函数参数的类型是float*
而score是float**类型,它赋值给p的时候发生了类型转换,转换成了float*
*score是float*类型,它们2个都指向第一个元素,所以效果就一样的咯。 
float*指针加1,当然只偏移sizeof(float)字节
其他:应该是模16,因为4个int占用16字节的内存 p 是指针
最开始是把a[0]的地址给p
p<a[0]+12是   p的指向的单元的地址     比    a[0]后第12个的单元地址   小 指针的加减运算跟类型有关。
比如 p++  实际加的是 4
p-a[0]  当然减出来会除以4 

上一个:C语言题目,高手帮忙解题
下一个:vc++6.0下 如何用C语言在控制台输出图形

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,