
关于几道C语言的问题
#include<stdio.h>main(){staticchara[]=”Program”,*ptr;for(ptr=a,ptr<a+7;ptr+=2)putchar...
#include<stdio.h>
main( )
{ static char a[ ]=”Program”, *ptr;
for(ptr=a, ptr<a+7; ptr+=2)
putchar(*ptr);
}
运行结果为:
Prom
#include <stdio.h>
char s[]=”ABCD”;
main()
{ char *p;
for(p=s;p<s+4;p++)
printf(“%c %s\n”,*p,p);
}
运行结果为:
A ABCD
B BCD
C CD
D D
#include <stdio.h>
main()
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p,i,j,n;
for(p=a[0];p<a[0]+6;p++)
printf("%d,",*p);
}
运行结果为:
1,2,3,4,5,6,
#include <stdio.h>
main( )
{ struct date
{ int year, month, day;
} today;
union
{ long i;
int k;
char ii;
} mix;
printf(“date:%d\n”,sizeof(struct date));
printf(“mix:%d\n”,sizeof(mix));
}
(提示:long 型变量占4个字节,int 型变量占2个字节,char型变量占1个字节)
运行结果是:
date: 6
mix: 4
#include<stdio.h>
struct st
{int n;
struct st *next;
} a[3]={5,&a[1],7,&a[2],7,&a[0]},*p=a;
main()
{ int i;
for(i=0;i<5;i++) p=p->next;
printf("p->n=%d\n",p->n);
}
运行结果是:
p->n=7
#include<stdio.h>
main()
{ int a[]={1,2,3,4,5,6};
int *p;
p=a;
printf("%d ",*p);
printf("%d ",*(++p));
printf("%d ",*++p);
printf("%d ",*(p--));
p+=3;
printf("%d %d ",*p,*(a+3));
}
运行结果为:
2 3 3 5 4
#include<stdio.h>
struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;
main()
{
printf("%d\n",a[0].y*a [1].x);
}
运行结果是:
请帮忙写一下这几个程序的运行过程,希望详细一点,这几个程序我没有看明白,谢谢各位了!!!
再问一下struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;
和struct st
{ int x;
int y;
} a[2]={{5, 7},{ 2, 9}} ;赋值有区别么?谢谢了!!
还有下面这个程序,为什么赋值a为数组,a[][]怎么在循环中变为a[]了?不是很理解,希望给予解答!!谢谢!!
#include <stdio.h>
main()
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p,i,j,n;
for(p=a[0];p<a[0]+6;p++)
printf("%d,",*p);
} 展开
main( )
{ static char a[ ]=”Program”, *ptr;
for(ptr=a, ptr<a+7; ptr+=2)
putchar(*ptr);
}
运行结果为:
Prom
#include <stdio.h>
char s[]=”ABCD”;
main()
{ char *p;
for(p=s;p<s+4;p++)
printf(“%c %s\n”,*p,p);
}
运行结果为:
A ABCD
B BCD
C CD
D D
#include <stdio.h>
main()
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p,i,j,n;
for(p=a[0];p<a[0]+6;p++)
printf("%d,",*p);
}
运行结果为:
1,2,3,4,5,6,
#include <stdio.h>
main( )
{ struct date
{ int year, month, day;
} today;
union
{ long i;
int k;
char ii;
} mix;
printf(“date:%d\n”,sizeof(struct date));
printf(“mix:%d\n”,sizeof(mix));
}
(提示:long 型变量占4个字节,int 型变量占2个字节,char型变量占1个字节)
运行结果是:
date: 6
mix: 4
#include<stdio.h>
struct st
{int n;
struct st *next;
} a[3]={5,&a[1],7,&a[2],7,&a[0]},*p=a;
main()
{ int i;
for(i=0;i<5;i++) p=p->next;
printf("p->n=%d\n",p->n);
}
运行结果是:
p->n=7
#include<stdio.h>
main()
{ int a[]={1,2,3,4,5,6};
int *p;
p=a;
printf("%d ",*p);
printf("%d ",*(++p));
printf("%d ",*++p);
printf("%d ",*(p--));
p+=3;
printf("%d %d ",*p,*(a+3));
}
运行结果为:
2 3 3 5 4
#include<stdio.h>
struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;
main()
{
printf("%d\n",a[0].y*a [1].x);
}
运行结果是:
请帮忙写一下这几个程序的运行过程,希望详细一点,这几个程序我没有看明白,谢谢各位了!!!
再问一下struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;
和struct st
{ int x;
int y;
} a[2]={{5, 7},{ 2, 9}} ;赋值有区别么?谢谢了!!
还有下面这个程序,为什么赋值a为数组,a[][]怎么在循环中变为a[]了?不是很理解,希望给予解答!!谢谢!!
#include <stdio.h>
main()
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p,i,j,n;
for(p=a[0];p<a[0]+6;p++)
printf("%d,",*p);
} 展开
2个回答
展开全部
第一题:运行结果应该为:porm,
ptr=a,就是*ptr=a[0],循环一次ptr+=2之后*ptr=a[2],之后就是a[4],a[6],也就是p,o,r,m;
第二题:
和上一个一样 指针p=s,就是,p指向了数组的首地址也就是第一个元素s[0]的地址,所以,*p就
是指s[0],而输出p则是用首地址来输出了整个字符数组,而循环一次之后,p向后移一位了,p就指向
s[1]的地址,*p=s[1](也就是B),输出整个字符数组,也就是从s[1]开始,依次类推;
第三题:
是这样,二维数组本质上在内存中来说也是一维的,它的第二行是接着第一行来存的,是连续的
在内存中,所以你可以用一维的方式连续输出6个,如果p<a[0]+12,也就全输出了。
第三题:
是这样,struct结构体的大小是将其所有的数据成员的大小相加的到的,所以,3个int型是6。
而,union联合大小是等于其内部数据成员中最大的,所以其大小等于long型等于4。
第四题:
结构体中有两个数据成员,一个是int型数据,一个是指向结构体st类型的指针;而定义的
st类型的数组a[3]中,a[0]存的是5和a[1]的地址,a[1]中存的是7和a[2]的地址,a[2]中存的是
7和a[0]的地址;
指针p=a,就指向了a[0],p=p->next,就是p=a[0].next,而a[0].next=&a[1],所以p就指向了a[1],
而p->n,就相当于a[1].n;也就是7了;
第五题:
结果应该为:1 2 3 3 5 4
p=a;*p=a[0],这是没有问题的,第二条,*(++p),先算前加加p指向a[1],在算*p,自然输出2,
第三条一样,*取值和++的优先级是一样的但是它们的结合性事从右向左,所以还是先算前加加p=a[2],
自然有输出了3,第四条,虽然,是先算p--,但是它是后减,即先取出p的值用,然后,在执行
自减,所以输出3,但是之后p指向了a[1],最后,p+=3,使p指向了a[4],所以输出5。但是a是数组名是常量,
是一直都没有变的所以*(a+3)=4;
第六题:
运行结果是:14。用a[2]={5,7,2,9}或者,a[2]={{5,7},{2,9}}结果是一样的,5赋值给a[0].x
7赋值给a[0].y,2赋值给a[1].x,9赋值给a[1].y,程序上来说没区别,只是可能从可读性上来说后者更好。
ok
基本就是这样
ptr=a,就是*ptr=a[0],循环一次ptr+=2之后*ptr=a[2],之后就是a[4],a[6],也就是p,o,r,m;
第二题:
和上一个一样 指针p=s,就是,p指向了数组的首地址也就是第一个元素s[0]的地址,所以,*p就
是指s[0],而输出p则是用首地址来输出了整个字符数组,而循环一次之后,p向后移一位了,p就指向
s[1]的地址,*p=s[1](也就是B),输出整个字符数组,也就是从s[1]开始,依次类推;
第三题:
是这样,二维数组本质上在内存中来说也是一维的,它的第二行是接着第一行来存的,是连续的
在内存中,所以你可以用一维的方式连续输出6个,如果p<a[0]+12,也就全输出了。
第三题:
是这样,struct结构体的大小是将其所有的数据成员的大小相加的到的,所以,3个int型是6。
而,union联合大小是等于其内部数据成员中最大的,所以其大小等于long型等于4。
第四题:
结构体中有两个数据成员,一个是int型数据,一个是指向结构体st类型的指针;而定义的
st类型的数组a[3]中,a[0]存的是5和a[1]的地址,a[1]中存的是7和a[2]的地址,a[2]中存的是
7和a[0]的地址;
指针p=a,就指向了a[0],p=p->next,就是p=a[0].next,而a[0].next=&a[1],所以p就指向了a[1],
而p->n,就相当于a[1].n;也就是7了;
第五题:
结果应该为:1 2 3 3 5 4
p=a;*p=a[0],这是没有问题的,第二条,*(++p),先算前加加p指向a[1],在算*p,自然输出2,
第三条一样,*取值和++的优先级是一样的但是它们的结合性事从右向左,所以还是先算前加加p=a[2],
自然有输出了3,第四条,虽然,是先算p--,但是它是后减,即先取出p的值用,然后,在执行
自减,所以输出3,但是之后p指向了a[1],最后,p+=3,使p指向了a[4],所以输出5。但是a是数组名是常量,
是一直都没有变的所以*(a+3)=4;
第六题:
运行结果是:14。用a[2]={5,7,2,9}或者,a[2]={{5,7},{2,9}}结果是一样的,5赋值给a[0].x
7赋值给a[0].y,2赋值给a[1].x,9赋值给a[1].y,程序上来说没区别,只是可能从可读性上来说后者更好。
ok
基本就是这样
展开全部
#include<stdio.h>
void main( )
{ static char a[ ]="Program", *ptr;
for(ptr=a;ptr<a+7;ptr+=2) //ptr=a使指针指向字符串a的首地址.ptr+=2,即ptr=ptr+2,是将指针指向下2个储存单元
putchar(*ptr); //prt变化:ptr=&a[0],ptr=&a[2],ptr=&a[4],ptr=&a[6],ptr=&a[8]
}
运行结果为:
Prom
#include <stdio.h>
char s[]="ABCD";
main()
{ char *p;
for(p=s;p<s+4;p++) //p++,即p=p+1,且在使用后+1
printf("%c %s\n",*p,p); //%c字符格式输出(*p为输出字符),%s字符串格式输出(p为字符串首地址)
}
运行结果为:
A ABCD //p==s,即p==&s[0],*p:s[0]('A')
B BCD //p==&s[1],*p:s[1]('B')
C CD //p==&s[2],*p:s[2]('C')
D D //p==&s[3],*p:s[3]('D')
#include <stdio.h>
void main()
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p;
for(p=a[0];p<a[0]+6;p++) //对于二维数组a[m][n],a[i]表示第i行的首地址,其他同上
printf("%d,",*p); //%d整形输出
}
运行结果为:
1(a[0][0],p=&a[0][0]),2(a[0][1],p=&a[0][1]),3(a[0][2],p=&a[0][2]),4(a[0][3],p=&a[0][3]),5(a[1][0],p=&a[1][1]),6(a[1][2],p=&a[0][0]),
指针移动同上。
#include <stdio.h>
main( )
{ struct date
{ int year, month, day;
} today;
union
{ long i;
int k;
char ii;
} mix;
printf("date:%d\n",sizeof(struct date)); //sizeof()函数返回值为date所占空间大小 2+2+2
printf("mix:%d\n",sizeof(mix)); // union mix为共同体,即数据占用同一段空间,大小为最大数据所需,此处为long,4字节
}
(提示:long 型变量占4个字节,int 型变量占2个字节,char型变量占1个字节)
运行结果是:
date: 6
mix: 4
#include<stdio.h>
struct st
{int n;
struct st *next; //结构体指针,用于连接到下一结构体
} a[3]={5,&a[1],7,&a[2],7,&a[0]},*p=a; //赋值,环形连接,即a[i].next=&a[i+1]再首尾相连,*p=a为首地址&a[0]
void main()
{ int i;
for(i=0;i<5;i++) p=p->next; //p指针变化:&a[0],&a[1],&a[2],,&a[0],&a[1],&a[2]
printf("p->n=%d\n",p->n); //p->n,即a[2].n
}
运行结果是:
p->n=7
#include<stdio.h>
void main()
{ int a[]={1,2,3,4,5,6};
int *p;
p=a;
printf("%d ",*p); //指针移动通上。p++即p使用后加1,++p即先加以再使用 p--相同
printf("%d ",*(++p));
printf("%d ",*++p);
printf("%d ",*(p--));
p+=3;
printf("%d %d ",*p,*(a+3)); //*(a+i)即地址a后第i个储存单元
}
运行结果为:
1 2 3 3 5 4
#include<stdio.h>
struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;//a[0].x=5,a[0].y=7,a[1].x=2,a[1].x=9
void main()
{
printf("%d\n",a[0].y*a[1].x); //输出7*2
}
运行结果是:
14
//请帮忙写一下这几个程序的运行过程,希望详细一点,这几个程序我没有看明白,谢谢各位了!!!
//再问一下struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;
和struct st
{ int x;
int y;
} a[2]={{5, 7},{ 2, 9}} ;赋值有区别么?谢谢了!! //此处无区别,但下一种更好
还有下面这个程序,为什么赋值a为数组,a[][]怎么在循环中变为a[]了?不是很理解,希望给予解答!!谢谢!!
#include <stdio.h>
main()
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p,i,j,n;
for(p=a[0];p<a[0]+6;p++)
printf("%d,",*p);
}
void main( )
{ static char a[ ]="Program", *ptr;
for(ptr=a;ptr<a+7;ptr+=2) //ptr=a使指针指向字符串a的首地址.ptr+=2,即ptr=ptr+2,是将指针指向下2个储存单元
putchar(*ptr); //prt变化:ptr=&a[0],ptr=&a[2],ptr=&a[4],ptr=&a[6],ptr=&a[8]
}
运行结果为:
Prom
#include <stdio.h>
char s[]="ABCD";
main()
{ char *p;
for(p=s;p<s+4;p++) //p++,即p=p+1,且在使用后+1
printf("%c %s\n",*p,p); //%c字符格式输出(*p为输出字符),%s字符串格式输出(p为字符串首地址)
}
运行结果为:
A ABCD //p==s,即p==&s[0],*p:s[0]('A')
B BCD //p==&s[1],*p:s[1]('B')
C CD //p==&s[2],*p:s[2]('C')
D D //p==&s[3],*p:s[3]('D')
#include <stdio.h>
void main()
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p;
for(p=a[0];p<a[0]+6;p++) //对于二维数组a[m][n],a[i]表示第i行的首地址,其他同上
printf("%d,",*p); //%d整形输出
}
运行结果为:
1(a[0][0],p=&a[0][0]),2(a[0][1],p=&a[0][1]),3(a[0][2],p=&a[0][2]),4(a[0][3],p=&a[0][3]),5(a[1][0],p=&a[1][1]),6(a[1][2],p=&a[0][0]),
指针移动同上。
#include <stdio.h>
main( )
{ struct date
{ int year, month, day;
} today;
union
{ long i;
int k;
char ii;
} mix;
printf("date:%d\n",sizeof(struct date)); //sizeof()函数返回值为date所占空间大小 2+2+2
printf("mix:%d\n",sizeof(mix)); // union mix为共同体,即数据占用同一段空间,大小为最大数据所需,此处为long,4字节
}
(提示:long 型变量占4个字节,int 型变量占2个字节,char型变量占1个字节)
运行结果是:
date: 6
mix: 4
#include<stdio.h>
struct st
{int n;
struct st *next; //结构体指针,用于连接到下一结构体
} a[3]={5,&a[1],7,&a[2],7,&a[0]},*p=a; //赋值,环形连接,即a[i].next=&a[i+1]再首尾相连,*p=a为首地址&a[0]
void main()
{ int i;
for(i=0;i<5;i++) p=p->next; //p指针变化:&a[0],&a[1],&a[2],,&a[0],&a[1],&a[2]
printf("p->n=%d\n",p->n); //p->n,即a[2].n
}
运行结果是:
p->n=7
#include<stdio.h>
void main()
{ int a[]={1,2,3,4,5,6};
int *p;
p=a;
printf("%d ",*p); //指针移动通上。p++即p使用后加1,++p即先加以再使用 p--相同
printf("%d ",*(++p));
printf("%d ",*++p);
printf("%d ",*(p--));
p+=3;
printf("%d %d ",*p,*(a+3)); //*(a+i)即地址a后第i个储存单元
}
运行结果为:
1 2 3 3 5 4
#include<stdio.h>
struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;//a[0].x=5,a[0].y=7,a[1].x=2,a[1].x=9
void main()
{
printf("%d\n",a[0].y*a[1].x); //输出7*2
}
运行结果是:
14
//请帮忙写一下这几个程序的运行过程,希望详细一点,这几个程序我没有看明白,谢谢各位了!!!
//再问一下struct st
{ int x;
int y;
} a[2]={5, 7, 2, 9} ;
和struct st
{ int x;
int y;
} a[2]={{5, 7},{ 2, 9}} ;赋值有区别么?谢谢了!! //此处无区别,但下一种更好
还有下面这个程序,为什么赋值a为数组,a[][]怎么在循环中变为a[]了?不是很理解,希望给予解答!!谢谢!!
#include <stdio.h>
main()
{ static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p,i,j,n;
for(p=a[0];p<a[0]+6;p++)
printf("%d,",*p);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询