C习题指针部分
- 格式:doc
- 大小:144.50 KB
- 文档页数:18
指针练习题1.有以下程序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)ga2.设有说明int(*ptr)[m];其中的标识符ptr是A)M个指向整型变量的指针B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量3.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是A) p+1 B) a+1 C) a++ D) ++p4.若有语句int *point ,a=4;和point =&a;下面均代表地址的一组选项是A. a,point,*&aB. &*a,&a,*pointC. &point,*point,&aD. &a,&*point,point5.下面程序段的运行结果是char a[]=”language”,*p;p=a;while(*p!=’u’) {printf(“%c”, *p-32);p++;}A. LANGUAGEB. LANGuageNGngUAGE6.以下程序的运算结果是*p=1,m=3,n=5 。
#include<stdio.h>void main(){int a[5]={1,2,3,-4,5};int m,n,*p;p=&a[0];m=*(p+2);n=*(p+4);printf("*p=%d,m=%d,n=%d",*p,m,n);}7.写一通用函数slength,求出一个字符串的长度,并用main函数调用slength。
指针基础练习题
指针是C语言中非常重要的概念之一,掌握指针的基本使用方法对于理解和编写复杂的程序至关重要。
本文将提供一些指针的基础练习题,帮助读者巩固和提升对指针的理解和应用。
请读者根据每个题目的要求完成代码,并注明每一步的思路和解答。
题目一:交换两个变量的值
要求:编写一个函数,使用指针交换两个整数变量的值,并在主函数中调用该函数进行测试。
题目二:计算数组元素的平均值
要求:编写一个函数,使用指针计算给定整型数组的元素平均值,并在主函数中调用该函数进行测试。
数组长度和元素的值可由用户输入。
题目三:查找数组中的最大值和最小值
要求:编写一个函数,使用指针查找给定整型数组中的最大值和最小值,并在主函数中调用该函数进行测试。
数组长度和元素的值可由用户输入。
题目四:字符串反转
要求:编写一个函数,使用指针将输入的字符串反转,并在主函数中调用该函数进行测试。
要求不能使用任何库函数。
题目五:动态分配内存
要求:编写一个函数,使用指针动态分配内存,在堆中存储指定数量的整型数据,并在主函数中调用该函数进行测试。
要求用户输入存储的整数个数,然后输入每个整数。
题目六:指针数组的排序
要求:编写一个函数,通过指针数组实现对字符串数组的排序,并在主函数中调用该函数进行测试。
要求用户输入字符串的个数和每个字符串的值。
以上是指针基础练习题的要求和内容,通过完成这些题目,读者可以加深对指针概念和使用方法的理解,在实际编程中能够熟练地运用指针操作。
希望读者能够通过不断的练习和实践,掌握指针的应用技巧,并在编程中取得更好的成果。
指针编程练习题指针是一种特殊的数据类型,在C语言中有着重要的作用。
通过指针,我们可以直接访问和操作内存中的数据。
为了熟悉和掌握指针的使用,下面将给出一些指针编程练习题供大家参考。
1. 交换两个变量的值请编写一个程序,使用指针来交换两个整数变量的值。
要求在程序中定义两个整数变量a和b,通过指针交换它们的值,并打印交换后的结果。
示例输入:a = 10,b = 20示例输出:交换前:a = 10, b = 20交换后:a = 20, b = 102. 求数组元素的和请编写一个程序,使用指针来计算一个整型数组中所有元素的和。
要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,计算它们的和,并打印结果。
示例输入:array = {1, 2, 3, 4, 5}示例输出:数组元素的和为:153. 查找数组中的最大值和最小值请编写一个程序,使用指针来查找一个整型数组中的最大值和最小值。
要求在程序中定义一个整型数组array,并使用指针访问数组中的元素,找到数组中的最大值和最小值,并打印结果。
示例输入:array = {7, 4, 9, 2, 5}示例输出:最大值为:9最小值为:24. 字符串长度计算请编写一个程序,使用指针来计算一个字符串的长度。
要求在程序中定义一个字符数组string,并使用指针访问字符数组中的元素,计算字符串的长度,并打印结果。
示例输入:string = "Hello, World!"示例输出:字符串长度为:135. 动态内存分配请编写一个程序,使用指针来动态分配内存空间,并进行数据的读写操作。
要求在程序中使用malloc函数动态分配内存空间,读取用户输入的整数值并存储到动态分配的内存中,然后使用指针访问该内存中的数据,并打印结果。
示例输入:请输入一个整数: 10示例输出:读取到的整数为: 10以上是几个指针编程练习题的示例,通过练习这些题目,可以提高对指针的理解和使用技巧。
有问题的题目:40、46、54、55、122、123、1. 若已定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是A) a[p-a] B) *(&a[i])C) p[i] D) a[10]D2. 已知指针p的指向如下图所示,则执行语句*--p;后*p的值是a[0] a[1] a[2] a[3] a[4]┌──┬──┬──┬──┬──┐│10 | 20 | 30 │40 | 50 |└──┴──┴──┴──┴──┘p↑A) 30 B) 20C) 19 D) 29B3. 下面程序运行时,如果从键盘上输入3,5<回车>,程序输出的结果是________。
main( ){ int a,b,*pa,*pb;pa=&a; pb=&b;scanf("%d,%d",pa,pb);*pa=a+b;*pb=a+b;printf("a=%d,b=%d\n",a,b);}A) a=13,b=13 B) a=8,b=8C) a=8,b=13 D) 出错C4. 下面程序段的输出结果是________。
main( ){ char string1[20],string2[20]={"ABCDEF"};strcpy(string1,string2);printf("%s\n",string1+3);}A) EF B) DEFC) CDEF D) ABCDEFB5. 下列程序执行后的输出结果是________。
main(){ int a[3][3],i,*pmul;pmul=&a[0][0];for(i=0;i<9;i++) pmul[i]=i+1;printf("%d\n",a[1][2]);}A) 3 B) 6C) 9 D) 随机数B6. 有如下程序段int *p,a=10,b=1;p=&a; a=*p+b;执行该程序段后,a的值为________。
c语言面试题__指针篇c语言面试题__指针篇1. char * const p;char const * pconst char *p上述三个有什么区别?char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p; //和char const *p------------------------------------------------------2. char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout << ( str1 == str2 ) << endl;cout << ( str3 == str4 ) << endl;cout << ( str5 == str6 ) << endl;cout << ( str7 == str8 ) << endl;打印结果是什么?解答:结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域-----------------------------------------------3. 以下代码中的两个sizeof用法有问题吗?void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母{for( size_t i=0; i<="str[i]" )="" )<="" ++i="" if(="" p="" sizeof(str[0]);="" str[i]<="z">str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;UpperCase( str );cout << str << endl;答:函数内的sizeof有问题。
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编一程序,用指针数组在主函数中输入十个等长的字符串。
(1)设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是()A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;(2)若有定义:int x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是()A)随机值B)0 C)x的地址D)p的地址(3) 以下定义语句中正确的是()A) char a='A'b='B'; B) float a=b=10.0; C) int a=10,*b=&a; D) float *a,b=&a;(4) 有以下程序()main(){ int a=7,b=8,*p,*q,*r;p=&a;q=&b;r=p; p=q;q=r;printf("%d,%d,%d,%d\n",*p,*q,a,b);}程序运行后的输出结果是A) 8,7,8,7 B) 7,8,7,8 C) 8,7,7,8 D) 7,8,8,7(5) 设有定义:int a,*pA=&a;以下scanf语句中能正确为变量a读入数据的是()A) scanf(“%d”,pA) ;B) scanf(“%d”,a) ;C) scanf(“%d”,&pA) ; D) scanf(“%d”,*pA) ;(6) 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是()A) p=1; B) *q=2; C) q=p; D) *p=5;(7) 有以下程序()以下是引用片段:void fun(char *a, char *b){ a=b; (*a)++; }main (){ char c1="A", c2="a", *p1, *p2;p1=&c1; p2=&c2; fun(p1,p2);printf(“%c%c\n”,c1,c2);}程序运行后的输出结果是A) Ab B) aa C) Aa D) Bb(8) 若程序中已包含头文件stdio.h, 以下选项中,正确运用指针变量的程序段是()A) int *i=NULL; B) float *f=NULL;scanf("%d",i); *f=10.5;C) char t="m", *c=&t; D) long *L;*c=&t; L=…\0‟;(9) 有以下程序()以下是引用片段:#inc1udemain(){ printf("%d\n", NULL); }程序运行后的输出结果是A) 0 B) 1 C) -1 D) NULL没定义,出错(10) 已定义以下函数()fun (int *p){ return *p;}该函数的返回值是A) 不确定的值B) 形参p中存放的值C) 形参p所指存储单元中的值D) 形参p的地址值(11) 下列函数定义中,会出现编译错误的是()A) max(int x, int y,int *z) B) int max(int x,y){ *z=x>y ? x:y; } {int z ;z=x>y? x:y;return z ;}C) max (int x,int y) D) int max(int x,int y){ int z; { return(x>y?x:y) ; }z=x>y?x:y; return(z);}(12) 有以下程序段()以下是引用片段:main(){ int a=5, *b, **c;c=&b; b=&a;……}程序在执行了c=&b;b=&a;语句后,表达式:**c的值是A) 变量a的地址B) 变量b中的值C) 变量a中的值D) 变量b的地址(13) 有以下程序()以下是引用片段:main(){ char a,b,c,*d;a=‟\‟; b=…\xbc‟;c=…\0xab‟; d="\017";print("%c%c%c\n",a,b,c,*d);}编译时出现错误,以下叙述中正确的是A) 程序中只有a=‟\‟;语句不正确B) b=…\xbc‟;语句不正确C) d="\0127";语句不正确D) a=‟\‟;和c=…\0xab‟;语句都不正确(14) 若有以下定义和语句()以下是引用片段:#includeint a=4,b=3,*p,*q,*w;p=&a; q=&b; w=q; q=NULL;则以下选项中错误的语句是AA) *q=0; B) w=p; C) *p=a; D) *p=*w;(15) 有以下程序以下是引用片段:int *f(int *x,int *y){ if(*x<*y) return x;else return y;}main(){ int a=7,b=8,*p=&a,*q=&b,*r};r=f(p,q);printf(“%d,%d,%d”,*p,*q,*r); }执行后输出结果是()A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8(16) 若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是()A) p=q; B) *p=*q; C) n=*q; D) p=n;(17) 有以下程序()以下是引用片段:void fun(char *c,int d){ *c=*c+1;d=d+1;printf(“%c,%c,”,*c,d);}main(){ char a=‟A‟,b=‟a‟;fun(&b,a); printf(“%c,%c\n”,a,b);}程序运行后的输出结果是A)B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b(18) 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是()A) scanf("%d%d%d",&a,&b,d); B) scanf("%d%d%d",&a,&b,&d);C) scanf("%d%d%d",a,b,d); D) scanf("%d%d%d",a,b,*d);(19) 若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为()A) 无确定值B) a的地址C) 512 D) 511(20) 若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是()A) i=*p; B) p*=*&j; C) i=&j; D) i=**p;(21) 下列程序段的输出结果是()A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2以下是引用片段:void fun(int *x, int *y){ printf(“%d %d”, *x, *y); *x=3; *y=4;}main(){ int x=1,y=2;fun(&y,&x);printf(“%d %d”,x, y);}(22) 下列程序的运行结果是()A) 6 3 B) 3 6 C) 编译出错D) 0 0以下是引用片段:void fun(int *a, int *b){ int *k;k=a; a=b; b=k;}main(){ int a=3, b=6, *x=&a, *y=&b;fun(x,y);printf(“%d %d”, a, b);}(23) 有如下程序段()int *p,a=10,b=1p=&a; a=*p+b;执行该程序段后,a的值为A) 12 B) 11 C) 10 D) 编译出错(24) 有以下函数()char fun(char *p){ return p; }该函数的返回值是A) 无确切的值B) 形参p中存放的地址值B) 一个临时存储单元的地址D) 形参p自身的地址值(25) 请选出正确的程序段()A) int *p; B) int *s, k;scanf("%d",p); *s=100;… …C) int *s, k; D) int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&c;*p='a'; s=p;… *s=1;…(26) 若有以下定义和语句:()double r=99,*p=&r;*p=r;则以下正确的叙述是A) 以下两处的*p含义相同,都说明给指针变量p赋值B) 在"double r=99,*p=&r;"中,把r的地址赋值给了p所指的存储单元C) 语句"*p=r;"把变量r的值赋给指针变量pD) 语句"*p=r;"取变量r的值放回r中(27) 以下程序运行后,a的值是()A) 4 B) 1 C) 0 D) 运行时出错,a无定值以下是引用片段:main(){ int a,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;printf("%d\n",a);}(28) 有以下程序()以下是引用片段:int fun(int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x-y; }main(){ int a, b, c, d;a=30; b=50;fun(a,b,&c,&d);printf("%d,%d\n", c, d);}输出结果是A) 50,30 B) 30,J50 C) 80,-20 D) 80,20(29) 若有定义和语句()int **pp,*p,a=10,b=20;pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);则输出结果是:A)10,20 B)10,10 C)20,10 D)20,20(30) 以下程序的输出结果是()以下是引用片段:#includesubl(char a,char b) {char c; c=a;a=b;b=c;}sub2(char* a,char b) {char c; c=*a;*a=b;b=c;}sub3(char* a,char*b) {char c; c=*a;*a=*b;*b=c;} { char a,b;a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);a='A';b='B';sub1(a,b);putchar(a);putchar(b);}A) BABBAB B) ABBBBA C) BABABA D) BAABBA(31) 若有说明:int i,j=7,*p=&i;,则与i=j;等价的语句是()A) I= *P; B) *P=*&J; C) i=&j; D) i=* *p;(32) 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。
c语言指针数组经典题目详解指针数组是一个数组,其元素都是指针。
C语言中,指针数组经常用于存储一组字符串或一组指向不同类型对象的指针。
下面是一些经典的题目,对指针数组进行详细解析。
题目1:将一个字符串数组按字典排序。
解析:首先,我们声明一个指向字符串的指针数组,将字符串数组的每个元素赋值给指针数组的对应元素。
然后使用冒泡排序法对指针数组进行排序,最后按照排序后的顺序打印指针数组元素所指向的字符串。
```c#include <stdio.h>#include <string.h>#define MAX_LENGTH 100#define MAX_NUM 10void bubbleSort(char* arr[], int size) {for (int i = 0; i < size - 1; i++) {for (int j = 0; j < size - 1 - i; j++) {if (strcmp(arr[j], arr[j+1]) > 0) {char* temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}int main() {char* strings[MAX_NUM] = {"dog", "cat", "apple", "banana", "elephant", "fish", "goat", "zebra", "horse", "tiger"};int size = sizeof(strings) / sizeof(strings[0]);bubbleSort(strings, size);for (int i = 0; i < size; i++) {printf("%s\n", strings[i]);}return 0;}```题目2:将一个整数数组按升序排序。
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。
c语言指针编程题以下是一个简单的C语言指针编程题,可以通过指针操作实现字符串的反转:```c#include <stdio.h>#include <string.h>void reverseString(char* str) {int i, j;char temp;for (i = 0, j = strlen(str) - 1; i < j; i++, j--) {temp = str[i];str[i] = str[j];str[j] = temp;}}int main() {char str[] = "Hello, world!";printf("Original string: %s\n", str);reverseString(str);printf("Reversed string: %s\n", str);return 0;}```在这个程序中,我们定义了一个名为`reverseString`的函数,该函数接受一个字符串作为参数,并通过指针操作实现字符串的反转。
具体来说,我们使用两个指针i和j来遍历字符串,将i指向的字符与j指向的字符交换位置,直到i指向字符串的第一个字符,j指向字符串的最后一个字符为止。
在主函数中,我们定义了一个字符串`str`,并调用`reverseString`函数来反转该字符串。
最后,我们输出反转后的字符串和原始字符串,以便进行比较和验证。
需要注意的是,在使用指针操作时,一定要确保指针指向的内存区域已经分配并且不会被释放,否则可能导致程序崩溃或数据损坏。
同时,在使用指针操作时,还需要注意指针的类型和大小,以确保指针操作的正确性和有效性。
指针一、选择题1.变量的指针,其含义是指该变量的____________。
A.值B.地址C.名D.一个标志2.已知int *p,a;则语句“p=&a;”中的运算符“&”的含义是____________。
A. 逻辑与运算B.位与运算C.取指针内容D.取地址变量3.对于类型相同的指针变量,不能进行()运算。
A.+B.—C. =D.==4.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是____________。
A.a,point,*&aB.&*a,&a,*pointC.*&point,*point,&aD.&a,&*point ,point5.设指针x指向的整型变量值为28,则printf(“%d\n”,++*x);的输出是____________。
A.27B.28C. 29D.306.若有说明:int *p,m=5,n;以下正确的程序段是____________。
A.p=&n; scanf(“%d”,&p);B.p=&n; *p=m;C.scanf(“%d”,&n); *p=n;D.p=&n; scan(“%d”,*p);7.若有以下定义和语句:则下列说法正确的是____________。
double r==99,,*p=&r*p=r;A.以上两处的*p含义相同,都说明给指针变量p赋值B.在double r==99,*p=&r,把r的地址赋给了p所指的存储单元C.语句“*p=r”,把变量r的值赋给指针变量pD.语句“*p=r”,取变量r的值放回r中8.执行下面程序段后,变量a的值为____________。
int *p,a,b=1;p=&a;*p=l0;a=*p+b;A.12B.11C.10D.编译错误9.若有说明:int i, j=7,*p=&i; 则i与j;等价的语句是____________。
A. i=*p ;B. *p=*&j ;C. i=&j ;D.i=**p;10.设p1和p2均为指向同一个int 型一维数组元素的指针变量,k为int型变量,下列不正确的语句是____________。
A. k=*p1+*p2;B. k=*p1*(*p2);C. p2=k;D.p1=p2;11.下面程序应能对两个整型变量的值进行交换。
以下正确的说法是____________。
main(){ int a=10,b=20;printf(“(1)a=%d,b=%d\n”,a,b);swap(&a,&b);}swap(int p,int q){ int t;t=p;p=q;q=t;}A.该程序完全正确B.该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可C.该程序有错,只要将语句swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可D.以上说法都不正确12.若有以下定义,则表达式*p++的值是____________。
int a[5]={10,20,30,40,50},*p=&a[1];A.20B. 30C.21D. 3113.下面程序的运行结果是____________。
main(){int a[]={9,8,7,6,5,4,3,2,l,0),*p=a+5;printf(“%d”,*--p);}A.5B.a[4]的地址C.3D.414. 设有以下语句,则____________不是对a数组的正确引用,其中0<=i<10。
int a[10]={0,1,2,3,4,5,6,7,7,9},*p=a;A.a[p-a]B. *(&a[i])C. p[i]D.*(*(a+1))15.在二维数组a中,元素a[0][1]的地址可表示为____________。
A. *(*(a+0)+1)B. *(a+1)C. &aD.*a+116.执行以下程序段,m的值为____________。
int a[2][3]={{l,2,3},{4,5,6}};int m,*p;p=&a[0][0];m=(*p)*(*(p+2))*(*(p+4));A.12B.13C.14D.1517.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为____________。
A.*(a[i]+j)B.(a+i)C.*(a+j)D.a[i]+j18.若有定义:int a[2][3],则对a数组的第i行j列元素值的正确引用为____________。
A.*(*(a+i)+j)B.(a+i)[j]C.*(a+i+j)D.*(a+i)+j19.若有定义 int a[4][6];则能正确表示a数组中任一元素a[i][j](i,j均在有效范围内)地址的表达式是____________。
A.&a[0][0]+6*i+jB. &a[0][0]+4*j+iC. &a[0][0]+4*i+jD. &a[0][0]+6*j+i20.指针所指向的字符串的长度为____________。
char *s=”\t\’Name\\Address\n” ;A. 19B.18C.15D.1721.已知:char b[5],*p=b;则正确的赋值语句是____________。
A. b=”abcde”B. *b=”abcde”C. p=”abcde”D. *p=”abcde”22.设有如下的程序段:char str[]=”hello”;char *ptr;ptr=str;执行完上面的程序段后,*(ptr+5)的值为____________。
A. ‘0’B.’\0’C. 不确定的值D.’0’的地址23.若有说明语句char a[]="It is mine";char *p="It is mine";则以下不正确的叙述是_____________。
A.a+1表示的是字符t的地址B.p指向另外的字符串时,字符串的长度不受限制C.p变量中存放的地址值可以改变D.a中只能存放10个字符24.下列说明不正确的是____________。
A.char a[10]=“china”;B.char a[10],*p=a;p=“china”;C.char *a;a=“china”;D.char a[10],*p;p=a=“china”;25.下面程序的运行结果是____________。
#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.不确定的值26.若有以下定义:char *cc[2]={“1234”,“5678”}则正确的叙述是____________。
数组的两个元素中各自存放了字符串“1234”和“5678”的首地址数组的两个元索分别存放的是含含4个字符的一维字符数组的首地址是指针变量,它指向含有两个数组元素的字符型一维数组数组元素的值分别是“1234”和“5678”27.设有定义:int(*ptr) [M];其中的标示符ptr是____________。
A.M个指向整型变量的指针B. 指向M个整型变量的函数指针C. 一个指向具有M个整型元素的一维数组的指针D. 具有M个指针元素的一维指针数组,每个元素都是一个指向整数变量的指针28.下面程序的运行结果是____________。
main(){int char[2][5]={“4934”,“8254”},*p[2];int i,j,s=0:for(i=0;i<2;i++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[i][j]>’\0’&&p[i][j]<=’9’;j==2)s=l 0*s+p[i][j]-‘0’;printf(“%d\n”,s);}A. 4385B. 43825C. 49825D. 49382529.若有以下说明语句,请选出哪个是对C数组元素的正确引用____________。
int c[4][5],(*p)[5];p=c;A. p+1B. *(p+3)C. *(p+1)+3D. *(*p+2)30.若有以下定义和语句,则对a数组元素地址的正确引用是____________。
int a[2][3],(*p)[3];p=a;A. *(p+2)B. p[2]C. p[1]+1 (D)(p+1)+231.若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是()int t[3][3],*pt[3],k;for(k=0;k<3;k++) pt[k]=t[k];A. t[2][0]B. t[2][2]C. t[1][2]D. t[2][1]. 若有以下定义,则对a数组的非法引用时____________。
int a[2][3],(*pa)[3];pa=a;A. *(a[0]+2)B. *pa[2]C. pa[0][0]D. *(pa[1]+2)32.若有以下定义:int x[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int (*p)[3]=x则能正确表示数组元素x[1][2]的表达式是____________。
A. *((*p+1)[2])B. (*p+1)+2C. *(*(p+5))D. *(*(p+1)十2)33.设有以下的程序段,则对数组的错误引用是____________。
int a[12]={0},*p[3],**pp,i;for(i=0;i<3;i++)p[i]=&a[i*4];pp=p;A. pp[0][1]B. a[10]C. p[3][1]D. *(*(p+2)+2)34.已有定义int(*p)();指针p可以____________。
A. 代表函数的返回值B.指向函数的入口地址C. 表示函数的类型D. 表示函数返回值的类型35.以下正确的叙述是____________。
A. C语言允许main函数带形参,且形参个数和形参名均可由用户指定B. C语言允许main函数带形参,形参名只能是argc和argvC. 当main函数带形参时,传给形参的值只能从命令行中得到D. 若有说明:main(int argc,char *argv),则形参argc的值必须大于l36.main函数的正确说明形式是。