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语言在控制台输出图形