C语言指针习题及答案
C语言指针习题__附答案
一、选择题1.变量的指针,其含义是指该变量的____b____.a)值b)地址c)名d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是___d__.a)a,point,*&a b)&*a,&a,*pointc)*&point,*point,&a d)&a,&*point ,point3.若有说明;int *p,m=5,n;以下正确的程序段的是___d__.a)p=&n; b)p=&n;scanf("%d",&p); scanf("%d",*p);c)scanf("%d",&n); d)p=&n;*p=n; *p=m;4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是_b__.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是一个指针变量5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是__d__.void print_value(int *x){ printf(“%d\n”,++*x);}a)23 b)24 c)25 d)266.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是aA) *p=&a;scanf("%ld",p);B) p=(long *)malloc(8);scanf("%ld",p);C) scanf("%ld",p=&a);D) scanf("%ld",&a);7.有以下程序#include<stdio.h>main(){ int m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}程序运行后的输出结果是bA)1,2,1,2 B)1,2,2,1C)2,1,2,1 D)2,1,1,28.有以下程序main(){ int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c;*p =*p1*(*p2);printf("%d\n",c);}执行后的输出结果是cA)1 B)2 C)3 D)49. 有以下程序main(){ int a,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}程序运行后的输出结果是(d)A)4 B)1 C)0 D)运行时出错,无定值10. 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是(a)A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与a+1等价11.有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是(d)A)5 B)6 C)8 D)912.若有以下定义,则对a数组元素的正确引用是___d______.int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)13.若有以下定义,则p+5表示___a____.int a[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是(b)A) for(p=a;a<(p+10);a++);B) for(p=a;p<(a+10);p++);C) for(p=a,a=a+10;p<a;p++);D) for(p=a;a<p+10; ++a);15.有以下程序段#include <stdio.h>int main(){ int x[] = {10, 20, 30};int *px = x;printf("%d,", ++*px); printf("%d,", *px);px = x;printf("%d,", (*px)++); printf("%d,", *px);px = x;printf("%d,", *px++); printf("%d,", *px);px = x;printf("%d,", *++px); printf("%d\n", *px);return 0;}程序运行后的输出结果是( a)A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,2016.设有如下定义:int arr[]={6,7,8,9,10};int *ptr;ptr=arr;*(ptr+2)+=2;printf ("%d,%d\n",*ptr,*(ptr+2));则程序段的输出结果为 dA)8,10 B)6,8 C)7,9 D)6,1017.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____. *(a+5)的值是_12________.18.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是___d___.A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2))19.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___a___.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j20.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8__. *(*(a+1)+0)的值是____8____.21.有以下定义char a[10],*b=a;不能给数组a输入字符串的语句是(b)A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b);22.下面程序段的运行结果是____c_____.char *s="abcde";s+=2;printf("%d",s);a)cde b)字符'c' c)字符'c'的地址d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是(c)A) char s[10]="abcdefg"; B) char t[]="abcdefg",*s=t;C) char s[10];s="abcdefg"; D) char s[10];strcpy(s,"abcdefg");24.设已有定义: char *st="how are you"; 下列程序段中正确的是(c)A) char a[11], *p; strcpy(p=a+1,&st[4]);B) char a[11]; strcpy(++a, st);C) char a[11]; strcpy(a, st);D) char a[], *p; strcpy(p=&a[1],st+2);25.有以下程序main(){char a[]="programming",b[]="language";char *p1,*p2;int i;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));}输出结果是(d)A)gm B)rg C)or D)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是____b____.a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);27.以下正确的程序段是_____c____.a)char str[20]; b)char *p;scanf("%s",&str); scanf("%s",p);c)char str[20]; d)char str[20],*p=str;scanf("%s",&str[2]); scanf("%s",p[2]);28.若有说明语句char a[]="It is mine";char *p="It is mine";则以下不正确的叙述是___d_____.a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是___b____.#include <stdio.h>#include <string.h>main(){ char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}a)正数b)负数c)零d)不确定的值30.有以下程序void f(int *x,int *y){int t;t=*x;*x=*y;*y=t;}main(){int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;p=a;q=&a[7];while(*p!=*q){f(p,q);p++;q--;}for(i=0;i<8;i++) printf("%d,",a[i]);}程序运行后的输出结果是__d____。
C语言指针习题及答案
指针习题及答案一.选择题1。
变量的指针,其含义是指该变量的 B 。
A)值B)地址C)名D)一个标志2。
已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2)3.若有说明:int *p,m=5,n;以下程序段正确的是 D .A)p=&n ;B)p = &n ;scanf(“%d”,&p); scanf(“%d",*p);C)scanf(“%d”,&n); D)p = &n ;*p=n ; *p = m ;4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是D 。
void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。
A)p1=&m;p2=&p1 ; B)p1=&m;p2=&n; *p1=*p2 ;C)p1=&m; p2=p1 ; D)p1=&m;*p1=*p2 ;6。
若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D . A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7.下面判断正确的是 C 。
A)char *a="china”; 等价于char *a; *a="china” ;B)char str[10]={“china”};等价于char str[10];str[ ]={“china";}C)char *s="china"; 等价于char *s; s=”china” ;D)char c[4]=”abc",d[4]=”abc”;等价于char c[4]=d[4]=”abc” ;8。
c语言指针问题及答案
}
static void foo2(int *p, int *q){
int *tmp = p;p = q;q = tmp;
}
static void test5()
{
int a = 3;int b = 5;
void (*p[2])(int*, int*);
void(*p[2])(int *, int);
定义了一个函数指针的数组p, p有两个指针元素.元素是函数的指针,函数指针指向的函数是一个带2个参数,不返回任何类型值的函数,所带的两个参数分别是指向整型的指针,和整型
p[0] = f1; p[1] = f2 contain address of function .function name without parenthesis represent address of function Value and address of variable is passed to function only argument that is effected is a (address is passed). Because of call by value f1, f2 can not effect b
int (*p)[3] = a;
printf("%d %d\n", (*p)[1], (*p)[2]);
//*(*p + 1) //2 3
p++;
printf("%d %d\n", (*p)[1], (*p)[2]); //5 6
}
//==============================
c语言指针题目及答案
c语言指针题目及答案一选择题(7分,每小题0.5分)1.C语言源程序的基本单位是( )。
A 过程B 函数C 子程序D 标识符2.下列程序的输出结果是( )。
main( ){ int a=7,b=5;printf("%d",b=b/a);}A 5B 1C 0 D不确认值3.假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是( )。
A 7B 8C 9D 24.设a为int型变量,执行下列赋值语句后,a的取值分别是( )。
a=125.534; a=(int)125.521%4; a=5<<2;A 125,31,1B 125,1,20C 125,31,20D 125.534,2,205.建有如下程序段,下面叙述中恰当的就是 ( )。
int k=10; while(k=0) k=k-1;A 循环继续执行一次 B循环就是无穷循环 C循环体语句一次也不继续执行 D循环体语句继续执行一次6.以下程序的输出结果为( )。
int i;void prt( ){ for(i=5;i<8;i++) printf("%c",'*');printf(" ");}main( ){ for(i=5;i<=8;i++) prt( );}A ***B *** *** *** ***C *** ***D * * *7.在C语言程序中,以下说法正确的是( )。
A函数的定义可以嵌套,但函数的调用不可以嵌套B函数的定义不可以嵌套,但函数的调用可以嵌套C函数的定义和函数的调用都不可以嵌套D函数的定义和函数的调用都可以嵌套8.以下函数调用语句中所含( )个实参。
func((e1,e2),(e3,e4,e5));A 2B 3C 5D 语法错误9.以下程序的输出结果为( )。
#define ADD(x) x*xmain( ){ int a=4,b=6,c=7,d=ADD(a+b)*c;printf("d=%d",d);}A d=70B d=80C d=140D d=70010.未知职工记录叙述如下,在Turbo C中,系统为变量w分配( )字节的空间。
C语言指针精选习题和答案
C语言指针精选习题和答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <stdio.h>void swap(int *pa,int *pb) {int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c); if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c); }二、C语言用指针方法输入3个字符串按由小到大顺序输出#include "stdio.h"#include "string.h"int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<stdio.h>void main(){int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20];while((s[i]=getchar())!='\n')i++; p=s;while(*p!=10){if(*p>='A'&&*p<='Z') a++;else if(*p>='a'&&*p<='z') b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9') d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); }9.5写一个函数,将3 3矩阵转置 #include "stdio.h"void Transpose(int (*matrix)[3]) {int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j);*(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}9.6用指向一维数组的指针做函数参数 #include<stdio.h>#include<string.h>int main(){void sort(char (*s)[6]);//一维数组的指针做函数参数int i;char str[10][6];char (*p)[6];//定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i++)scanf("%s",&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i++)printf("%s/n",str[i]);return 0;}void sort(char (*s)[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
C语言指针习题 附答案
C语言指针习题附答案c语言指针习题--附答案一、选择题1.变量的指针,其含义就是指本变量的_________.a)值b)地址c)名d)一个标志2.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是_____.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point3.若有说明;int*p,m=5,n;以下正确的程序段的是________.a)p=&n;b)p=&n;scanf(\scanf(\c)scanf(\d)p=&n;*p=n;*p=m;4.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________.main(){int*p,*q,a,b;p=&a;printf(“inputa:”);scanf(“%d”,*p);……}a)*p则表示的就是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p 只能用来说明p是一个指针变量5.尚无变量定义和函数调用语句:inta=25;print_value(&a);下面函数的恰当输入结果就是________.voidprint_value(int*x){printf(“%d\\n”,++*x);}a)23b)24c)25d)266.若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是a)*p=&a;scanf(\,p);b)p=(long*)malloc(8);scanf(\,p);c)scanf(\,p=&a);d)scanf(\,&a);7.有以下程序#includemain(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(\}程序运行后的输出结果是a)1,2,1,2c)2,1,2,18.存有以下程序main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf(\}继续执行后的输入结果就是a)19.有以下程序main(){inta,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf(\}程序运行后的输出结果是()a)410.在16十一位编译系统上,若存有定义inta[]={10,20,30},*p=&a;,当继续执行p++;后,以下观点错误的就是()a)p向低地址安远了一个字节c)p向低地址安远了两个字节b)p向高地址移了一个存储单元d)p与a+1等价b)1c)0d)运行时出错,无定值b)2c)3d)4b)1,2,2,1d)2,1,1,211.存有以下程序段inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是()a)5b)6c)8d)912.若有以下定义,则对a数组元素的正确引用是_________.inta[5],*p=a;a)*&a[5]b)a+2c)*(p+5)d)*(a+2)13.若有以下定义,则p+5表示_______.inta[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设尚无定义:inta[10]={15,12,7,31,47,20,16,28,13,19},*p;以下语句中恰当的就是()a)for(p=a;ad)for(p=a;a15.存有以下程序段#includeintmain(){intx[]={10,20,30};int*px=x;printf(\printf(\px=x;printf(\printf(\px=x;printf(\printf(\px=x;printf(\printf(\return0;}程序运行后的输入结果就是()a)11,11,11,12,12,20,20,20b)20,10,11,10,11,10,11,10c)11,11,11,12,12,13,20,20d)20,10,11,20,11,12,20,2016.设有如下定义:intarr[]={6,7,8,9,10};int*ptr;ptr=arr;*(ptr+2)+=2;printf(\则程序段的输出结果为a)8,10b)6,8c)7,9d)6,1017.若有定义:inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______.*(a+5)的值是_________.18.若存有以下表明和语句,intc[4][5],(*p)[5];p=c;能够恰当提及c数组元素的就是______.a)p+1b)*(p+3)c)*(p+1)+3d)*(p[0]+2))19.若存有定义:inta[2][3],则对a数组的第i行j列元素地址的恰当提及为______.a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j20.若有以下定义:inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____.*(*(a+1)+0)的值是________.21.存有以下定义chara[10],*b=a;不能给数组a输入字符串的语句是()a)gets(a)b)gets(a[0])c)gets(&a[0]);d)gets(b);22.下面程序段的运行结果是_________.char*s=\s+=2;printf(\a)cdeb)字符'c'c)字符'c'的地址d)并无确认的输入结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()a)chars[10]=\c)chars[10];s=\24.设已有定义:char*st=\下列程序段中正确的是()a)chara[11],*p;strcpy(p=a+1,&st[4]);b)chara[11];strcpy(++a,st);c)chara[11];strcpy(a,st);d)chara[],*p;strcpy(p=&a[1],st+2);25.存有以下程序main(){chara[]=\char*p1,*p2;inti;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf(\}输出结果是()a)gmb)rgc)ord)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);27.以下正确的程序段是_________.a)charstr[20];b)char*p;scanf(\scanf(\c)charstr[20];d)charstr[20],*p=str;scanf(\scanf(\28.若有说明语句chara[]=\char*p=\则以下不正确的叙述是________.a)a+1则表示的就是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运转结果就是_______.#include#include。
(完整word版)C语言指针练习+答案+讲解
第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。
除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。
A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
C语言指针精选习题和答案
一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <stdio.h>void swap(int *pa,int *pb){int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c);}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include "stdio.h"#include "string.h"int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0};p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<stdio.h>void main(){int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while((s[i]=getchar())!='\n')i++;p=s;while(*p!=10){if(*p>='A'&&*p<='Z')a++;else if(*p>='a'&&*p<='z')b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9')d++;else e++;p++;}printf("大写字母%d 小写字母%d\n",a,b);printf("空格 %d 数字 %d 非字符 %d\n",c,d,e);}9.5写一个函数,将3 3矩阵转置#include "stdio.h"void Transpose(int (*matrix)[3]){int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j);*(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}9.6用指向一维数组的指针做函数参数#include<stdio.h>#include<string.h>int main(){void sort(char (*s)[6]);//一维数组的指针做函数参数int i;char str[10][6];char (*p)[6];//定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i++)scanf("%s",&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i++)printf("%s/n",str[i]);return 0;}void sort(char (*s)[6])//s指向一维数组的指针做函数参数;{int i,j;char temp[6], *t;t=temp;for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
c语言指针指针变量scanf,C语言指针练习(包括答案和详解)
c语⾔指针指针变量scanf,C语⾔指针练习(包括答案和详解)《C语⾔指针练习(包括答案和详解)》由会员分享,可在线阅读,更多相关《C语⾔指针练习(包括答案和详解)(21页珍藏版)》请在⼈⼈⽂库⽹上搜索。
1、第7章第7章指针71选择题1说明:int a=2,*p=,以下错误的赋值语句为(D):a p=q;b * p=* q;c a=* q;d q=a;a是整数,int*p,*q定义指针,p,q是指向整数的指针。
p获取a的地址,q获取p的地址p。
q是指针(即地址),*p和*q是此指针指向的整数值(此地址中存储的值)。
a)如果将q的地址分配给p,则p和q完全相同。
都指向数字2 B。
)q的数据个p C) q的数据为a D)a的数据为2。
⽆法提供地址。
如果未定义*q=a 2,则:int a=511,*b=的输出为:D A未确定的值B a的地址C 512D 511 int a=511,*b=a是a pri。
2、ntf(输出指针变量B)。
也就是说,指向变量的值输出结果511 3中已经有int a=2,*p1=下未正确执⾏的赋值语句为(b)。
Aa=* p1 *p2bp1=a;Cp1=p2da=* P1 *(* p2);据悉,程序中定义了以下语句:int *P1,* P2int k;P1=p2=⽆法在以下语句中正确执⾏是(B) A,k=* P1 * P2b,p2=k;c,P1=P2d,K=* P1 *(* P2);P1 P2是指针,K是整数变量,变量如何为指针赋值?a实际上是k=k k k (P1和P2都指向K,因此*P1*P2实际上是K) C是赋值语句d实际执⾏K=K*K 4变量的指针。
含义是变量(b。
3、)。
a值b地址c名称d标志5如果有说明语句:int a、b、c、* d=b scanf (%d% d% d、a、b、d);C scanf (%d% d% d,d scanf (%d% d% d,a,b,* d);对于Int c,* d=,c是整数数据,d是指向变量c的指针。
C语言习题十指针
习题十指针1. 有以下程序void f(int *q){ int i=0;for( ;i<5;i++) (*q)++;}main(){ int a[5]={1,2,3,4,5},i;f(a);for(i=0;i<5;i++) printf("%d,",a[i]);}程序运行后的输出结果是______。
A、2,2,3,4,5,B、6,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,解析:本题考查的是指针作为函数的参数和函数的调用。
题目中定义了一个指针变量作为函数f()的形参。
主函数main()中调用f()函数,当i=0时,执行语句(*q)++,此处*q代表的就是数组元素a[0]的值,即将1进行加1操作;当i=1时,q仍指向数组元素a[0]的地址,因为在函数f()中并未对指针变量q作任何变动,也即*q仍代表了数组元素a[0]的值,所以此次(*q)++即2+1,所以a[0]的值变为3;……直到i=4时,执行(*q)++(即5+1)后a[0]的值变为6。
所以最后的输出结果为:6,2,3,4,5,。
故本题答案选B。
2. 有以下程序#include <stdio.h>main(){ int n, *p=NULL;*p=&n; printf("Input n:");scanf("%d",&p); printf("output n:"); printf("%d\n",p);}该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是______。
A、int n , *p=NULL;B、*p=&n;C、scanf("%d",&p)D、printf("%d\n",p);解析:本题考查的是指针的赋值。
C语言指针习题__附答案[1]
一、选择题1.变量的指针,其含义是指该变量的_________.a)值b)地址c)名d)一个标志2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____. a)a,point,*&a b)&*a,&a,*pointc)*&point,*point,&a d)&a,&*point ,point3.若有说明;int *p,m=5,n;以下正确的程序段的是________.a)p=&n; b)p=&n;scanf("%d",&p); scanf("%d",*p);c)scanf("%d",&n); d)p=&n;*p=n; *p=m;4. 以下程序中调用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是一个指针变量5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是________.void print_value(int *x){ printf(“%d\n”,++*x);}a)23 b)24 c)25 d)266.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是A) *p=&a;scanf("%ld",p);B) p=(long *)malloc(8);scanf("%ld",p);C) scanf("%ld",p=&a);D) scanf("%ld",&a);7.有以下程序#include<stdio.h>main(){ int m=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}程序运行后的输出结果是A)1,2,1,2 B)1,2,2,1C)2,1,2,1 D)2,1,1,28.有以下程序main(){ int a=1, b=3, c=5;int *p1=&a, *p2=&b, *p=&c;*p =*p1*(*p2);printf("%d\n",c);}执行后的输出结果是A)1 B)2 C)3 D)49. 有以下程序main(){ int a,k=4,m=4,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}程序运行后的输出结果是()A)4 B)1 C)0 D)运行时出错,无定值10. 在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是()A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与a+1等价11.有以下程序段int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是()A)5 B)6 C)8 D)912.若有以下定义,则对a数组元素的正确引用是_________.int a[5],*p=a;a)*&a[5] b)a+2 c)*(p+5) d)*(a+2)13.若有以下定义,则p+5表示_______.int a[10],*p=a;a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值14.设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是()A) for(p=a;a<(p+10);a++);B) for(p=a;p<(a+10);p++);C) for(p=a,a=a+10;p<a;p++);D) for(p=a;a<p+10; ++a);15.有以下程序段#include <stdio.h>int main(){ int x[] = {10, 20, 30};int *px = x;printf("%d,", ++*px); printf("%d,", *px);px = x;printf("%d,", (*px)++); printf("%d,", *px);px = x;printf("%d,", *px++); printf("%d,", *px);px = x;printf("%d,", *++px); printf("%d\n", *px);return 0;}程序运行后的输出结果是( )A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,2016.设有如下定义:int arr[]={6,7,8,9,10};int *ptr;ptr=arr;*(ptr+2)+=2;printf ("%d,%d\n",*ptr,*(ptr+2));则程序段的输出结果为A)8,10 B)6,8 C)7,9 D)6,1017.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______. *(a+5)的值是_________.18.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是______.A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2))19.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______.a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j20.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____. *(*(a+1)+0)的值是________.21.有以下定义char a[10],*b=a;不能给数组a输入字符串的语句是()A)gets(a) B)gets(a[0]) C)gets(&a[0]); D)gets(b);22.下面程序段的运行结果是_________.char *s="abcde";s+=2;printf("%d",s);a)cde b)字符'c' c)字符'c'的地址d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()A) char s[10]="abcdefg"; B) char t[]="abcdefg",*s=t;C) char s[10];s="abcdefg"; D) char s[10];strcpy(s,"abcdefg");24.设已有定义: char *st="how are you"; 下列程序段中正确的是()A) char a[11], *p; strcpy(p=a+1,&st[4]);B) char a[11]; strcpy(++a, st);C) char a[11]; strcpy(a, st);D) char a[], *p; strcpy(p=&a[1],st+2);25.有以下程序main(){char a[]="programming",b[]="language";char *p1,*p2;int i;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));}输出结果是()A)gm B)rg C)or D)ga26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.a)c=*p1+*p2; b)p2=c c)p1=p2 d)c=*p1*(*p2);27.以下正确的程序段是_________.a)char str[20]; b)char *p;scanf("%s",&str); scanf("%s",p);c)char str[20]; d)char str[20],*p=str;scanf("%s",&str[2]); scanf("%s",p[2]);28.若有说明语句char a[]="It is mine";char *p="It is mine";则以下不正确的叙述是________.a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是_______.#include <stdio.h>#include <string.h>main(){ char *s1="AbDeG";char *s2="AbdEg";s1+=2;s2+=2;printf("%d\n",strcmp(s1,s2));}a)正数b)负数c)零d)不确定的值30.有以下程序void f(int *x,int *y){int t;t=*x;*x=*y;*y=t;}main(){int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;p=a;q=&a[7];while(*p!=*q){f(p,q);p++;q--;}for(i=0;i<8;i++) printf("%d,",a[i]);}程序运行后的输出结果是______。
指针练习题及答案
指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。
```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。
```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。
```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。
c语言指针习题及答案
c语言指针习题及答案C语言指针习题及答案C语言作为一门广泛应用于软件开发和系统编程的编程语言,指针是其重要的特性之一。
掌握指针的使用对于理解和编写高效的C程序至关重要。
本文将介绍一些常见的C语言指针习题,并提供相应的答案,帮助读者更好地理解和掌握指针的概念和用法。
1. 习题一:交换两个变量的值请编写一个函数,接受两个整型指针作为参数,实现交换两个变量的值。
例如,如果输入a=10,b=20,函数执行后,a=20,b=10。
答案:```cvoid swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}```2. 习题二:查找数组中的最大值和最小值请编写一个函数,接受一个整型数组和数组长度作为参数,返回数组中的最大值和最小值。
例如,对于数组[5, 2, 9, 1, 7],函数应该返回最大值9和最小值1。
答案:```cvoid findMinMax(int *arr, int length, int *max, int *min) {*max = *min = arr[0];for (int i = 1; i < length; i++) {if (arr[i] > *max) {*max = arr[i];}if (arr[i] < *min) {*min = arr[i];}}}```3. 习题三:计算字符串长度请编写一个函数,接受一个字符串作为参数,返回字符串的长度。
例如,对于字符串"Hello, World!",函数应该返回12。
答案:```cint stringLength(char *str) {int length = 0;while (*str != '\0') {length++;str++;}return length;}```4. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。
C语言指针习题及答案资料讲解
A)strcpy1(char *p1,char *p2)
{ while ((*p1++=*p2++)!=’\0’) ; }
B)strcpy2(char *p1,char *p2)
{ while ((*p1=*p2)!=’\0’) { p1++; p2++ } }
B)char str[10]={“china”};等价于char str[10]; str[ ]={“china”;}
C)char *s=”china”;等价于char *s; s=”china”;
D)char c[4]=”abc”,d[4]=”abc”;等价于char c[4]=d[4]=”abc”;
C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;
6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是D。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p
7.下面判断正确的是C。
A)char *a=”china”;等价于char *a; *a=”china”;
C)strcpy3(char *p1,char *p2)
{ while (*p1++=*p2++) ; }
D)strcpy4(char *p1,char *p2)
{ while (*p2) *p1++=*p2++ ; }
14.下面程序段的运行结果是C。
c语言指针编程题及详解
c语言指针编程题及详解c语言指针编程是一门用于编程的常见开发技术,通过指针的操作,可以让程序具备更强的表达能力,并且可以极大的减少代码的重复性。
根据其特性,以下列出了c语言指针编程的常见题目及详细解答:一、给定一个整型数组,使用指针把数组中的数字复制到另一个数组中相同的位置:解:#include<stdio.h>int main(){int *ptr1, *ptr2;int array1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int array2[10];ptr1 = array1; //设置指针1指向数组1的第一个元素ptr2 = array2; //设置指针2指向数组2的第一个元素while (ptr1<array1+10){ //当指针1指向的位置小于数组1的最后一个元素时,循环执行以下步骤*ptr2 = *ptr1; //将指针1指向的值赋值给指针2指向的位置ptr1++; //指针1指向下一个数组1中的元素ptr2++; //指针2指向下一个数组2中的元素}return 0;}二、给定两个整型数组,使用指针比较数组元素的大小:解:#include<stdio.h>int main(){int *ptr1, *ptr2;int array1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int array2[10] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20};ptr1 = array1; //设置指针1指向数组1的第一个元素ptr2 = array2; //设置指针2指向数组2的第一个元素while (ptr1<array1+10) { //当指针1指向的位置小于数组1的最后一个元素时,循环执行以下步骤if (*ptr1 > *ptr2) {printf("数组1元素大于数组2元素\n");} else if (*ptr1 < *ptr2) {printf("数组1元素小于数组2元素\n");} else {printf("数组1元素等于数组2元素\n");}ptr1++; //指针1指向下一个数组1中的元素ptr2++; //指针2指向下一个数组2中的元素}return 0;}三、用指针计算数组的最大值及最小值:解:#include<stdio.h>int main(){int *ptr, max, min;int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//定义指针及最大最小值变量ptr = array;max = *ptr;min = *ptr;//开始循环比较for (ptr=array; ptr<array+10; ptr++){if (*ptr > max) {max = *ptr; //将指针指向元素的值与最大值进行比较,如果指向元素的值大,在赋值给最大值}if(*ptr < min){min = *ptr; //将指针指向元素的值与最小值进行比较,如果指向元素的值小,在赋值给最小值}}printf("max is %d , min is %d\n", max, min); return 0;}四、从指定的字符组件中取得字符串:解:#include <stdio.h>int main(){char arr[12] = "Hello World!", *str;str = &arr[6];printf("String is : %s\n", str);return 0;}。
C语言程序设计(指针)习题与答案
return 0;
}
正确答案:Porm
9、如有定义char y[4]="321",*py=&y[0],则表达式*(py+2)的值是____。
正确答案:1
10、如有定义char z[2][4]={"MAT", "LAB"},*pz=&z[1][0];则表达式*pz+1的值是_____。
strcat(s,t);
D.char s[20]=" ", *t="12345";
strcat(s, t);
正确答案:D
8、下面程序段的运行结果是()。
#include <stdio.h>
int main()
{
char s[]="example!", *t;
t=s;
while( *t!='p')
{
printf("%c", *t-32);
6、指向函数的指针变量的值是一个函数的入口地址。(√)
7、作为函数形式参数时,int x[ ][5]与int (*x)[5]两种写法等价。(√)
8、二维M*N数组的名字是一个指向N元数组的指针常量。(√)
9、如果一个变量的值是一级指针变量的地址,则称这个变量为二级指针变量。(√)
10、可以利用指针实现函数返回多个值。(√)
gets(s1);
p1=s1;
p2=s2;
while(*p2++=*p1++);
printf("s2=%s",________);
return 0;
C指针练习题带答案
C指针练习题带答案1、设有下列定义char s[ ]={“12345”},*p=s,则下列表达式中不正确的是()。
A、p+1B、*(s+2)C、P=“abcd”D、*S=”ABC”2、设有下列定义static int x,*p=&x,*q;q=p;scanf(“%d,%d”,p,q);若输入“3,4”,则x的值为()A、3 B、4 C、0 D、无法确定3、以下程序的运行结果是:A、6 B、6789 C、‘6’ D、789includemain(){char b[10]={'1','2','3','4','5','6','7','8','9','\0'},*p=b;int k;k=8;p=b+k;printf("%s\n",p-3);}4、有以下程序的输出结果是()main(){int v[]={1,3,5,7,2,4,6,8};int I,*p;p=v;for(i=0;i<8;i++) if(*(p+i)==i+1) printf((“%d”,*(p+i));A、1B、18C、35D、165、若有语句int* p,a=4;p=&a下面均代表地址的一组选项是A.a,p,*&aB.&*a,&a,*pC.*&p,*p,&aD.&a,&*p,p6.若有说明int* p,m=5,n;以下正确的程序段是A.p=&nscanf("%d",&p);B.p=&n scanf("%d",*p);C.scanf("%d",&n); *p=n;D.p=&n *p=m;7.下列程序的运行结果是:swap(int *pt1,int *pt2){int p;p=*pt1;*pt1=*pt2;*pt2=p;}main(){int a=5,b=7,*p1,*p2;p1=&ap2=&bswap(p1,p2);printf("*p1=%d,*p2=%d\n",*p1,*p2);printf("a=%d,b=%d\n",a,b);}A、*p1=7,*p2=5B、*p1=7,*p2=5C、*p1=7,*p2=7D、*p1=5,*p2=5 a=5,b=7 a=7,b=5 a=5,b=5 a=5,b=7 (7)下列程序的运行结果是:main(){void swap1();void swap2();int a=3,b=4;swap1(a,b);printf(“%d,%d\n”,a,b);a=3,b=4;swap2(&a,&b);printf(“%d,%d”,a,b);}void swap1(x,y)int x,y;{int t;t=x;x=y;y=t;}void swap2(x,y)int *x,*y;{int t;t=*x;*x=*y;*y=t;}A、3,4B、4,3C、3 4D、4 34,3 3,4 4 3 3 48.若有定义int a[]={2,4,5,8,10,12},*p=a;则*(p+1)的值是()*(a+5)的值是()*p+1的值是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
B)ptr2=k
C)ptr1=ptr2
3、若有说明 :int *p,m=5,n; 以下程序段正确的就是
D
D)k=*ptr1*(*ptr2) 。
A)p=&n ; scanf( “%d ”,&p);
C)scanf( “%d”,&n); *p=n ;
4、已有变量定义与函数调用语句
B)p = &n ;
scanf(“%d ”,*p);
均在有效范围内 )
A)&a[0][0]+6*i+j
B)&a[0][0]+4*j+i
C)&a[0][0]+4*i+j
38、下面程序的运行结果就是
B
D)&a[0][0]+6*j+I 。
main ( ) { int x[5]={2,4,6,8,10}, *p, **pp ;
p=x , pp = &p ;
printf( “%d”,*(p++)); printf( “%3d”,**pp); }
A)a+1 表示的就是字符 t 的地址 B)p 指向另外的字符串时 ,字符串的长度不受限制
C 语言指针习题及答案
C)p 变量中存放的地址值可以改变
D)a 中只能存放 10 个字符
19、若已定义 char s[10]; 则在下面表达式中不表示 s[1] 的地址就是
B
。
A)s+1
B)s++
C)&s[0]+1
7、下面判断正确的就是
C
C)*&p,*p,&a 。
D)&a,&*p,p
A)char *a= ”china”; 等价于 char *a; *a= ”china ”;
B)char str[10]={ “china”}; 等价于 char str[10]; str[ ]={ “china”;}
C)char *s= ”china”; 等价于 char *s; s= ”china”;
D)p[1]+2
C
。
A)&a
B)a+1
C)a
27、若有定义 :int (*p)[4];
则标识符 p C
。
D)&a[1]
A) 就是一个指向整型变量的指针
B)就是一个指针数组名
C)就是一个指针 ,它指向一个含有四个整型元素的一维数组
D) 定义不合法
28、以下与 int *q[5]; 等价的定义语句就是
C
C 语言指针习题及答案
指针习题及答案
一.选择题
1、变量的指针 , 其含义就是指该变量的
B
。
A) 值
B) 地址
2、已有定义 int k=2;int *ptr1,*ptr2;
的赋值语句就是 B
。
C)名
D) 一个标志
且 ptr1 与 ptr2 均已指向变量 k, 下面不能正确执行
A)k=*ptr1+*ptr2
13、以下与库函数 strcpy(char *p1,char *p2)
功能不相等的程序段就是
D
。
A)strcpy1(char *p1,char *p2) { while ((*p1++=*p2++)!=
B)strcpy2(char *p1,char *p2)
’\0’) ; }
{ while ((*p1=*p2)!= ’\0’) { p1++; p2++ } } C)strcpy3(char *p1,char *p2)
A)8
B)16
C)20
36、若要对 a 进行自增运算 , 则 a 应具有下面说明 D
D) 输出不合法 。
A)int a[3][2]; C)char (*a) [3] 37、若有定义 int a[4][6]; 地址的表达式 A
则能正确表示 。
B)char *a[ ]={ “12”,”ab”}; D)int b[10], *a=b; a 数组中任一元素 a[i][j](i,j
D)q[i]=&b[0][0] 。
A)int p[3];
B)int k;
C)char *a[3]
int *a=p;
int *a=&k;
33、以下选项中 , 对指针变量 p 的正确操作就是 B
。
D)int b[10]; int *a=b+1;
A)int a[3], *p; p=&a;
B)int a[5], *p; p=a;
B)cc 数组的两个元素分别存放的就是含有 4 个字符的一维字符数组的首地址
C)cc 就是指针变量 ,它指向含有两个数组元素的字符型一维数组
D)cc 元素的值分别维 ”1234 ”与 ”5678”
42、已有定义 int (*p)( );
。
A)int q[5]
B)int *q
29、以下正确的说明语句就是
B
C)int *(q[5]) 。
D)int (*q)[5]
A)int *b[]={1,3,5,7,9} ; B)int a[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; C)int a[]={1,3,5,7,9}; int *num[5]={a[0],a[1],a[2],a[3],a[4]};
A)4 4
B)2 4
C)2 2
39、若有定义 int x[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*p)[3]=x ;
D)4 6 则能够正确表示数组元素
x[1][2] 的表达式就是 D A)*((*p+1)[2])
。 B)(*p+1)+2
C)*(*(p+5)) 40、若有说明 :char *language[]={ language[2] 的值就是 B
D)char c[4]= ”abc”,d[4]= ”abc”; 等价于 char c[4]=d[4]= ”abc”;
8、下面程序段中 ,for 循环的执行次数就是
C
。
char *s= ”\ta\018bc”;
for ( ; *s!= ’\0’; s++) printf( “*”) ;
A)9
B)7
C)6
A
。
A)*(*(a+i)+j)
B)(a+i)[j]
C)*(a+i+j)
D)*(a+i)+j
23、若有定义 :int a[2][3]; 则对 a 数组的第 i 行第 j 列元素地址的正确引用就是 D
。
A)*(a[i]+j)
B)(a+i)
C)*(a+j)
D)a[i]+j
24、若有程序段 :int a[2][3],(*p)[3];
C)char *a; a= ”china ”;
18、设有说明语句 :char a[]=
述就是 D
。
” It is mine
B)char a[10],*p=a; p= ”china”; D)char a[10],*p; p=a= ”china”; ” ;char *p= ” It is mine ” ; 则以下不正确的叙
char *s= ”abcde”;
s+=2 ; printf( “%d”,s);
A)cde
B) 字符 ’c’
C)字符 ’c’的地址
D) 不确定
11、设 p1 与 p2 就是指向同一个字符串的指针变量 ,c 为字符变量 , 则以下不能正确执行的赋
值语句就是 B
。
A)c=*p1+*p2
B)p2=c
C)p1=p2
9、下面能正确进行字符串赋值操作的就是
C
D)5 。
A)char s[5]={ “ABCDE ”};
B)char s[5]={ ‘A’,’B ’,’C’,’D ’,’E’};
C)char *s ; s= ”ABCDE ”;
10、下面程序段的运行结果就是
C
D)char *s; scanf( “%s”,s) ; 。
D)p = &n ;
*p = m ; :int a=25;print_value(&a);
下面函数的输出结果就是
D
。
void print_value(int *x) { printf( “%d\n ”,++*x); }
A)23
B)24
C)25
D)26பைடு நூலகம்
5、若有说明 :int *p1, *p2,m=5,n;
D)*(*(p+1)+2) “FORTRAN ”,”BASIC ”,”PASCAL ”,”JAVA ”,”C”}; 则
。
A) 一个字符
B) 一个地址
C)一个字符串
41、设有定义 :char *cc[2]={ “1234”,”5678”}; 则正确的叙述就是
D) 一个不定值
A
。
A)cc 数组的两个元素中各自存放了字符串 ”1234”与 ”5678”的首地址
D)p1=x+2,*++p1
C 语言指针习题及答案
35、下面程序段的输出就是
C
。
int a[ ]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k; for (k=01; k<4; k++) q[k]=&a[k*3];