指针练习
1 若 m 数组的元素和它们的值如下表示:
数组元素: m[0] m[1] m[2] m[3] m[4] m[5] m[6] m[7] m[8] m[9]
元素中的值: 9
则数组元素 m[m[4]+m[8]]的值是(
),*m+m[9] 的值是(
10
12
2
7
5
1
3
4
8
2 若有以下定义和语句,则下面各个符号的正确含义分别是:(例如对于符号 &a[2][1],应该写
)。m[*(m+4)]的值是(
).
3 若有以下定义和语句,在程序中引用数组元素 x[i] 的四种形式是:(
),(
),(
),和 x[i]。
成:数组元素 a[2][1]的地址)。
int a[3][4], (*q)[4]; q=a;
*(q+2): (
),
*(q+1)+2(
),
*(*q+2): (
)
x[10],
(假设 i 已正确说明并赋值)
int
若有定义:int m[10][6];在程序中引用数组元素的形式是:(
确说明并赋值)。
p=x;
*p;
4 若有以下定义和语句,在程序中可通过指针数组 p 来引用数组元素 s[i][j]( 假设 i,j 已正确
),(
),(
) (假设 i,j 已正
说明并赋值);它们是:(
s[10][6],*p[10];
int
for (i=0;i<10;i++) p[i]=s[i];
),(
5. void f( int y,int *x) {y=y+*x;
*x=*x+y;}
)和(
)。
void main(void )
{
int x=2,y=4;
f(y,&x);
printf(“%d %d\n”,x,y);
}
执行后输出的结果是()。
6. #include "stdio.h"
void main(void)
{char str[]="1234567890";
int *p=(int*)str;
printf("%c",*(p+1));
}
执行后输出的结果是()。
7. 若有以下定义和语句:
int a[4]={0,1,2,3},*p;
p=&a[1];
则++(*p)的值是(
),*--p的值是(
).
8.若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是(
), *(a[1]+2)
的值是(
).
9. 设 p1 和 p2 是指向同一个 int 型一维数组的指针变量,k 为 int 型变量,则不能正确执行的语
b. p1=p2;
c. p1=k;
e. k=*p1/(*p2);
句是:
a. k=*p1+*p2;
10. int a[2][3]={1,2,3,4,5,6};
int m,*p;
p=&a[0][0];
m=(*p)*(*(p+3))/(*(p+4))
m 的值:( )
11. void main(void)
{ char a[]=”programming”,b[]=”language”;
char *p1,*p2;
int i,len;
p1=a,p2=b;
len=strlen(a);
if(len>strlen(b))
for(i=0;i
void main()
{ void input(int *);
void change(int *);
void output(int *);
int number[10];
input(number);
change(number);
output(number);
}
void input(int number)
{ int i;
printf("input 10 numbers:" );
for(i=0;i<10;i++)
scanf("%d",&number[i]);
}
void change(int number)
{
int *p,*max,*min,temp;
max=min=number;
for(p=number+1;p*max) max=p;
else if(*p<*min)
min=p;
temp=*number[0];number[0]=*min;*min=temp;
temp=*number[9];number[9]=*max;*max=temp;
}
void output(int number)
{ int *p;
printf("now number is:");
for(p=number;p
}
19.以下程序把一个十进制整数转换成二进制整数,并把此二进制数的每一位放在一位数组 b 中,
然后输出 b 数组.(注意:二进制数的最低位放在数组的第一个元素中。)请填空.
main()
{ int b[16],x,k,r,i;
printf(“Enter an integer :\n”);
scanf(“%d”,&x);
printf(“%6d’s binary number is :
k=-1;
”,x);
do
{r=x%2;
k++;
*(
x/=2;
)=r;
}
while(
for(i=k; i>=0; i--) printf(“%1d”,*(
);
printf(“\n”);
));
}
20.设有五个学生,每个学生考四门课,以下程序能检查这些学生有无考试不及格的课程.若某一
学生有一门或几门不及格的课程,就输出该学生的序号(从 0 开始)和其全部课程成绩.请填
空.
main()
{int score[5][4]={ { 62,87,67,95 },{ 95,85,98,73 },{ 66,92,81,69 },
{ 78,56,90,99 },{ 60,79,82,89 } };
int (*p)[4],j,k,flag;
p=score;
for(j=0;j<5;j++)
flag=0;
for(k=0;k<4;k++)
{
if(
)
flag=1;
if(flag= =1)
{ printf(“No. %d is fail, scores are :\n”,j);
for(k=0;k<4;k++)
printf(“%5d”, (
printf(“\n”);
));
}
}
}