关于指针和数组名

来源:百度知道 编辑:UC知道 时间:2024/07/04 03:46:35
#include <math.h>
main()
{ int i,j,a[5][5];
int *p=a;
clrscr();
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=fabs(i-j)+1;
for(p=a;p<a+5;p++)
{ if((p-a)%5==0)
printf("\n");
printf("%-3d",*p);
}
getch();
}
这个是打印一个矩阵的程序,结果我就不打出来了
我要问的是
for(p=a;p<a+5;p++)
{ if((p-a)%5==0)
printf("\n");
printf("%-3d",*p);
}
p=a 指针p指向了a的首地址 那么这个a+5是代表什么 就是这里我没弄明白
它是a[4][4]的地址吗?
我认为的是a[0][0]到a[4][4] 每隔5个地址回车一次.
希望高手能给我解答一下..
我知道物理地址是连续的,那么再给二维数组分配地址时候肯定也是连续的一块.那么到底这个数组怎么放呢?a[0][1]和a[1][0]谁先放?
谢谢!
恩.我那也提示指针转换后指向其他类型.什么意思?
有人能给我修改一下么?
请先告诉我a+5指的是哪里?
再告诉我指针怎么造成混乱及解决办法
\

c++后面看不懂..C++没接触过

楼上那个误导别人啊- -||
晕,只要看懂上面一段文字就知道问题了吧

帮你修改了程序,没错了
代码如下,看看哪里不同自己体会下吧
#include <math.h>
#include<stdio.h>
#include<conio.h>
main()
{ int i,j,a[5][5];

int *p=a[0];
//clrscr();
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=fabs(i-j)+1;
for(p=a[0];p<a[0]+25;p++)
{ if((p-a[0])%5==0)
printf("\n");
printf("%-3d",*p);
}
getch();
}

a代表二维数组首元素的地址,现在的首元素不是一个整型变量,而是由5个整型元素所组成的一维数组,因此a代表的是首行的起始地址,(即第0行的起始地址,&a[0]),a+1代表a[1]行的首地址,即&a[1]。a+5就是代表a[5]行的首地址,即&a[5],
你那里赋值P是错误的,原因是a指向的是a[0](二维数组的首行,即指向一个一维数组),与P的类型不匹配,(p是指向整型数据的指针变量),编译时会出错的||

给个简单的输出二维数组各元素的值得程序
#include<iostream>
using namespace std;
int main()
{int a[3][4]={1,3,4,5,7,8,9,5,2,4,6,7};
int *p;
for(p=a[0];p<a[0]+12;p++)
cout<<*p<<"";
cout<<endl;
r