谁能把程序解释一下呢?1,#includeiostreamusing namespace stdint main(){int a[]{1,2,3,4,5}int x,y
谁能把程序解释一下呢?
1,
#include<iostream>
using namespace std;
int main()
{
int a[]={1,2,3,4,5};
int x,y,*p;
p=&a[0];//&a[0]与@a有什么区别呢?
x=*(p+2);
y=*(p+4);
printf("*p=%d,x=%d,y=%d\n",*p,x,y);//这个怎么解释?
}
2,printf("%d%d\n",*p,*(a+3))这是什么意思呢?
3,#include<iostream>
using namespace std;
int main()
{
static int day_tab[2][3]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}
int y,m,d;
scanf("%d%d%d",&y,&m,&d);//不懂
printf("%d\n",day_of_year(day_tab,y,m,d));//不懂
}
day_of_year(day_tab,year,month,day)//不懂
int *day_tab;
int year,month,day;
{
int i,j;
i=(year%4==0&&year%100!=0)||year%400==0;//不懂
for(j=1;j<month;j++)
day+=*(day_tab+i*13+j);//不懂
return(day);
}
4,extern char *getline(FILE *pFile);//这个完全不懂了
FILE *pFile;
char **ppText=NULL;
char *pCurrText=NULL;
ULONG ulCurrlines=0;
ULONG ulAllocedlines=0;
while(p=getline(pFile))
{
if(ulCurrLines>=ulAllocedLines)
{
ulAllocedLines+=50;
ppText=realloc(ppText,ulAllocedLines*(char*));
if(NULL=ppText)
{
return;
}
}
ppText[ulCurrlines++]=p;
}
[解决办法]好好看书噢~~~
[解决办法]&a[0]与@a没有区别,数组的名就是一个指向数组第一个元素的指针,所以没区别。
printf("*p=%d,x=%d,y=%d\n",*p,x,y);//这个怎么解释?
虽然我不知道你问的什么。
数组一旦声明后,里面的元素就以一段连续的地址存储在内存中,
"*p=%d"中的*p只是两个字符,无实际意义。逗号后面的*p是对指针p解引用,前面p=&a[0],是把a[0]的地址赋给指针p,现在,把存储在p中的地址取出来,然后指向该地址对应的值也就是a[0]。
你代码中有x=*(p+2),假设&a[0]的地址为1000,那a[0]以后的地址就是1000+sizeof(数组类型),你这里是 int 型的。指针p之前已经指向了地址&a[0],那么要想让p指向a[0后面的元素的地址,就让p变成(p+元素下标),这样,再对p解引用*(p+数组下标),再赋值给x,那么x现在就是现在p指向的地址内的值了。
printf("%d%d\n",*p,*(a+3))这是什么意思呢?
*p就不解释了,对于*(a+3),前面说过,数组一旦声明后,里面的元素就以一段连续的地址存储在内存中,&a[0]是第一个元素的地址,这里,*(a+3)相当于是直接对元素a[3]的地址解应用,省略了对指针p赋值的中间过程。如果存在赋值,也就相当于解应用*(p+3)。
说了这么多,看到你后面那么多不懂,我想笑了,麻烦楼主看书吧,最基本的你不懂啊。我说了等于白说啊。要死还是不懂,再问我吧。