指针一
对于类型相同的指针变量,不能进行哪种运算( )?
A) - B) + C) = D) >
若有以下说明,则正确的赋值表达式是( )。
int x,*p;
A) p=&x B) p=x C) *p=&x D) *p=*x
有如下语句int a=10,b=20,*p1,*p2;p1=&a;p2=&b;若要实现p1,p2均指向b,可选用的赋值语句是( )。
A) *p1=*p2; B) p1=p2; C) p1=*p2; D) *p1=p2;
以下程序的运行结果是( )。
sub(int x,int y,int *z)
{*z=y-x;}
main()
{int a,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);}
A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7
以下程序中根据C语言的头文件调用scanf函数给变量a输入数值的方法是错误的,其错误原因是( )。
main()
{int *p,*q,a,b;
p=&a;
printf("input a:");
scanf("%d",*p);
……
}
A) *p表示的是指针变量p的地址 B) *p表示的是变量a的值,而不是变量a的地址
C) *p表示的是指针变量p的值 D) *p只能用来说明p是一个指针变量。
变量的指针,其含义是指该变量的( )。
A) 值 B) 地址 C)名 D)一个标志
若有说明:int *p,m=5,n; 以下正确的程序段是( )。
A)p=&n; B)p=&n; C)scanf("%d",&n); D)p=&n;
scanf("%d",&p); scanf("%d",*p); *p=n *p=m;
下面程序段运行结果是( )。
char *p="%d,a=%d,b=%d\n";
int a=111,b=10,c;
c=a%b; p+=3;
printf(p,c,a,b);
A)1,a=111,b=10 B)a=1,b=111 C)a=111,b=10 D) 以上结果都不对。
执行下面程序段后,ab的值为( )。
int *var,ab;
ab=100;var=&ab; ab=*var+10;
A)120 B)110 C)100 D)90
若有定义:int x,*pb;则正确的赋值表达式是( )。
A)pb=&x B)pb=x C)*pb=&x D)*pb=*x
下面程序运行结果是( )。
void fun(int x)
{ printf("%d\n",++*x);
main()
{int a=25;fun(&a);}
A)23 B)24 C)25 D)26
对于两个类型相同的指针变量,不能进行( )运算?
A. + B. - C. = D. ==
以下程序的输出结果是( )。
a. 4 b. 6 c. 8 d. 10
main( )
{ int k=2,m=4,n=6;
int *pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf("%d\n",n);
}
若有int a[10]={1,2,3,4,5,,6,7,8,9,10};*p=a;则数值为9的表达式是( )。
A. *p+9 B. *(p+8) C. *p+=9 D. p+8
若根据c语言编程书籍有以下说明和语句,且0≤i<5,则下面哪个答案( )是对数组元素地址的正确表示?
float a[]={1.6,3.0,-5.4,7.8,94.0},*p,i;
p=a;
A) &(p+i) B) a++ C) &p D) &p[i]
若有以下说明, 则a[*(a+a[3])]的值为( )。
int a[]={8,1,2,5,0,4,7,6,3,9};
A) 8 B) 3 C) 0 D) 不合法
以下程序运行后,输出结果是( )。
main( )
{
int a[10]={19,23,44,17,37,28,49,36},*p;
p=a;
printf("%d\n",(p+=3)[3]);
}
A) 44 B) 17 C) 49 D) 运行时出错,无定值