当前位置:文档之家› 字符数组与指针练习题参考答案

字符数组与指针练习题参考答案

字符数组与指针练习题参考答案
字符数组与指针练习题参考答案

第七章字符数组与字符串

【题】下面是对s的初始化,其中不正确的是。

A)char s[5]={“abc”};B)char s[5]={‘a’,‘b’,‘c’};

C)char s[5]=“”;D)char s[5]=“abcdef”;

【题】下面程序段的运行结果是。

char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’};

printf(“%s”,c);

A)‘a’‘b’ B)ab C)ab c

【题】对两个数组a和b进行如下初始化

char a[]=“ABCDEF”;

char b[]={‘A’, ‘B’,‘C’,‘D’,‘E’,‘F’};

则以下叙述正确的是。

A)a与b数组完全相同B)a与b长度相同

C)a和b中都存放字符串D)a数组比b数组长度长

提示:‘\0’是字符串结束的标志

【题】有两个字符数组a、b,则以下正确的输入格式是。

A)gets(a,b); B)scanf(“%s %s”,a,b);

C)scanf(“%s %s”,&a,&b);D)gets(“a”),get(“b”);

【题】有字符数组a[80]和b[80],则正确的输出形式是。

A)puts(a,b); B)printf(“%s %s”,a[],b[]);

C)putchar(a,b); D)puts(a),puts(b);

【题】下面程序段的运行结果是。

char a[7]=“abcdef”;

char b[4]=“ABC”;

strcpy(a,b);

printf(“%c”,a[5]);

A)空格B)\0 C)e D)f

提示:复制后a[0]=‘A’,a[1]=‘B’,a[2]=‘C’,a[3]=‘\0’, a[4]=‘e’,a[5]=‘f’, a[6]=‘\0’,

【题】有下面的程序段

char a[3],b[]=“China”;

a=b;

printf(“%s”,a);

则。

A)运行后将输出China B)运行后将输出Ch

C)运行后将输出Chi D)编译出错

提示:数组名是常量

【题】下面程序段的运行结果是。

char c[]=“\t\n\\\0will\n”;

printf(“%d”,strlen(c));

A)14 B)3 C)9 D)字符串中有非法字符,输出值不确定

提示:strlen函数,求字符数符串的长度。

【题】判断字符串a和b是否相等,应当使用。

A)if(a==b) B)if(a=b)

C)if(strcpy(a,b)) D)if(strcmp(a,b))

提示:只有strcmp函数才能判别2个字符串的关系。

【题】判断字符串s1是否大于字符串s2,应当使用。

A)if(s1>s2) B)if(strcmp(s1,s2))

C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)

【题】下面程序段是输出两个字符串中对应字符相等的字符。请选择填空。char x[]=“programming”;

char y[]=“Fortran”;

int i=0;

while(x[i]!=‘\0’&&y[i]!= ‘\0’)

{

if(x[i]==y[i]) printf(“%c”,【1】);

else i++;

}

【1】A)x[i++] B)y[++i] C)x[i] D)y[i]

【题】下面描述正确的是。

A)两个字符串所包含的字符个数相同时,才能比较字符串

B)字符个数多的字符串比字符个数少的字符串大

C)字符串“STOP ”与“STOP”相等

D)字符串“That”小于字符串“The”

【题】下述对C语言字符数组的描述中错误的是。

A)字符数组可以存放字符串

B)字符数组的字符串可以整体输入、输出

C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值

D)不可以用关系运算符对字符数组中的字符串进行比较

【题】有已排好序的字符串a,下面的程序是将字符串s中的每个字符按a中元素的规律插入到a中。请选择填空。

#include <>

main()

{

char a[20]=“cehiknqtw”;

cha r s[]=“fbla”;

int i,k,j;

for(k=0;s[k]!=‘\0’;k++)

{

j=0;

while(s[k]>=a[j]&&a[j]!=‘\0’) j++;

for(【1】) 【2】;

a[j]=s[k];

}

puts(a);

}

【1】 A)i=strlen(a)+k; i>=j; i-- B)i=strlen(a); i>=j; i--

C)i=j; i<=strlen(a)+k; i++ D)i=j; i<=strlen(a); i++

【2】 A)a[i]=a[i+1] B)a[i+1]=a[i]

C)a[i]=a[i-1] D)a[i-1]=a[i]

【题】下面程序的功能是将已按升序排好序的两个字符串a和b中的字符按升序归并到字符串c中。请选择填空。

#include <>

main()

{

char a[]=“acegikm”;

char b[]=“bdfhjlnpq”;

char c[80],*p;

int i=0,j=0,k=0;

while(a[i]!=‘\0’&&b[j]!=‘\0’)

{

if(a[i]

else { 【2】 }

k++;

}

c[k]= ‘\0’;

if(【3】) p=b+j;

else p=a+i;

strcat(c,p);

puts(c);

}

【1】A)c[k]=a[i]; i++; B)c[k]=a[j]; i++;

C)c[k]=a[i]; j++; D)c[k]=a[j]; j++;

【2】 A)c[k]=a[i]; i++; B)c[k]=a[j]; i++;

C)c[k]=a[i]; j++; D)c[k]=a[j]; j++;

【3】A)a[i]==‘\0’B)a[i]!=‘\0’

C)a[i-1]==‘\0’D)a[i-1]!=‘\0’

【题】下面程序的功能是将字符串s中所有的字符‘c’删除。请选择填空。

#include <>

main()

{

char s[80];

int i,j;

gets(s);

for(i=j=0;s[i]!=‘\0’;i++)

if(s[i]!=‘c’) 【1】;

s[j]=‘\0’;

puts(s);

}

【1】A)s[j++]=s[i] B)s[++j]=s[i]

C)s[j]=s[i]; j++ D)s[j]=s[i]

【题】下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请选择填空。

#include <>

main()

{

char s[80],c1,c2=‘’;

int i=0,num=0;

gets(s);

while(s[i]!=‘\0’)

{

c1=s[i];

if(i==0) c2=‘’;

else c2=s[i-1];

if(【1】) num++;

i++;

}

pr intf(“There are %d words.\n”,num);

}

【1】 A)c1==‘’&&c2==‘’B)c1!=‘’&&c2==‘’

C)c1==‘’&&c2!=‘’ D)c1!=‘’&&c2!=‘’

【题】下面程序的运行结果是。

#include <>

main()

{

char ch[7]={“12ab56”};

int i,s=0;

for(i=0;ch[i]>=‘0’&&ch[i]<=‘9’;i+=2)

s=10*s+ch[i]-‘0’;

printf(“%d\n”,s);

}

A)1 B)1256 C)12ab56 D)1

2

5

6

【题】当运行以下程序时,从键盘输入:aa bb

cc dd

(表示回车),则下面程序的运行结果是。

#include <>

main()

{

char a1[5],a2[5],a3[5],a4[5];

scanf(“%s%s”,a1,a2);

gets(a3);

gets(a4);

puts(a1);

puts(a2);

puts(a3);

puts(a4);

}

/*提示:scanf(“%s”)是以空格、回车为结束标志;

gets( )仅是以回车作为结束标志, a3中接收到的是‘\n’

puts( )函数具有输出结束后自动加换行的功能*/

A)aa B)aa C)aa bb D)aa bb

bb bb cc cc dd

cc cc dd dd

dd

题】当运行以下程序时,从键盘输入:ab

c

def

(表示回车),则下面程序的运行结果是。

#include <>

#define N 6

main()

{

char c[N];

int i=0;

for(;i

for(i=0;i

}

A)abcdef B)a C)b D)ab

B c c

c d d

d

e

f

【题】当运行以下程序时,从键盘输入:AhaMA Aha(表示回车),则下面程序的运行结果是。

#include <>

main()

{

char s[80],c=‘a’;

int i=0;

scanf(“%s”,s);

while(s[i]!=‘\0’)

{

if(s[i]==c) s[i]=s[i]-32;

else if(s[i]==c-32) s[i]=s[i]+32;

i++;

}

puts(s);

}

A)ahAMa B)AhAMa C)AhAMa ahA D)ahAMa ahA

【题】下面程序的运行结果是。

#include <>

main()

{

char a[80]=“AB”,b[80]=“LMNP”;

int i=0;

strcat(a,b);

while(a[i++]!=‘\0’) b[i]=a[i];

puts(b);

}

A)LB B)ABLMNP C)AB D)LBLMNP

【题】下面程序的运行结果是。

#include <>

main()

{

char str[]=“SSSWLIA”,c;

int k;

for(k=2;(c=str[k])!=‘\0’;k++)

{

switch(c)

{

case ‘I’: ++k; break;

case ‘L’: continue;

default: putchar(c); continue;

}

putchar(‘*’);

}

}

A)SSW* B)SW* C)SW*A D)SW

【题】下面程序的运行结果是。

#include <>

main()

{

char a[]=“morning”,t;

int i,j=0;

for(i=1;i<7;i++)

if(a[j]

j=i;

t=a[j];

a[j]=a[7];

a[7]=a[j];

puts(a);

} /*提示:原a[7]中存放的是‘\0’*/

A)mogninr B)mo C)morning D)mornin

参考答案:

【题】D 【题】B 【题】D 【题】B 【题】D 【题】D 【题】D 【题】B 【题】D 【题】D 【题】A 【题】D 【题】C 【题】B B【题】ADA 【题】A 【题】B 【题】A 【题】B 【题】D 【题】A 【题】D 【题】B 【题】B

C语言程序设计实验答案数组、指针与字符串

实验06 数组、指针与字符串(4学时) (第6章数组、指针与字符串) 一、实验目的 二、实验任务 6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。 6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。 6_3 编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 6_4 使用string类声明字符串对象,重新实现上一小题。 6_5(习题6-27)声明一个Employee类。 其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。 6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee 类型的对象。 6_7 修改实验4中的people(人员)类。 具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”声明为一个“日期”类内嵌子对象。 用成员函数实现对人员信息的录入和显示。 要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。 在测试程序中声明people类的对象数组,录入数据并显示。

三、实验步骤 1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。 使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。程序名:lab6_1.cpp。 参考运行结果: ★程序及运行结果: //lab6_1.cpp #include using namespace std; void move(int matrix[][3]){ int temp; for(int i=0;i<3;i++) for(int j=0;j>mat[i][j]; } cout<<"\n输入的3×3矩阵为:"<

C语言字符串指针问题

C语言字符串指针问题 在C语言中,可以用两种方法访问一个字符串。 用字符数组存放一个字符串,然后输出该字符串。 1.main(){ 2.char string[]=”I love China!”; 3.printf("%s\n",string); 4.} 说明:和前面介绍的数组属性一样,string是数组名,它代表字符数组的首地址。 用字符串指针指向一个字符串。 1.main(){ 2.char *string=”I love China!”;

3.printf("%s\n",string); 4.} 字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如: char c,*p=&c; 表示p是一个指向字符变量c的指针变量。而: char *s="C Language"; 则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。 上例中,首先定义string是一个字符指针变量,然后把字符串的首地址赋予string(应写出整个字符串,以便编译系统把该串装入连续的一块内存单元),并把首地址送入string。程序中的:char *ps="C Language"; 等效于: char *ps; ps="C Language"; 输出字符串中n个字符后的所有字符。 1.main(){ 2.char *ps="this is a book";

3.int n=10; 4.ps=ps+n; 5.printf("%s\n",ps); 6.} 运行结果为: book 在程序中对ps初始化时,即把字符串首地址赋予ps,当ps= ps+10之后,ps指向字符“b”,因此输出为"book"。 在输入的字符串中查找有无‘k’字符。 1.main(){ 2.char st[20],*ps; 3.int i; 4.printf("input a string:\n"); 5.ps=st; 6.scanf("%s",ps); 7.for(i=0;ps[i]!='\0';i++) 8.if(ps[i]=='k'){ 9.printf("there is a 'k' in the string\n"); 10.break; 11.} 12.if(ps[i]=='\0') printf("There is no 'k' in the string\n");

C语言字符串的输入和输出

C语言字符串的输入和输出 字符串的输入和输出 %c人为加入\0进行输入输出 %s直接输入输出 *输入输出字符串时字符数组应有足够的存储空间,指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间 %s的使用 scanf("%s",地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 例:char str[15]; scanf("%s",str); abc123 1.不读入空格和回车,从空格处结束 2.输入字符串长度超过字符数组元素个数,不报错 3.当输入项为字符指针时,指针必须已指向确定的有足够空间的连续 存储单元 4.当为数组元素地址时,从此元素地址开始存放 2.printf("%s",地址值) 输出时遇到第一个'\0'为止 3.gets和puts函数 开头必须stdio.h #include"stdio.h"

1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 4.当为数组元素地址时,从此元素地址开始存放 5.printf("%s",地址值) 输出时遇到第一个'\0'为止 6.gets和puts函数 开头必须stdio.h #include"stdio.h" 1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 7.例: char str[10]; gets(str); 包括空格符 8. 2.puts(字符串起始地址) 遇第一个'\0'结束,自动加入换行符 9.字符串数组:数组中每个元素都是一个存放字符串的数组 可以将一个二维数组看作是字符串数组 10.char ca[3][5]={"A","BB","CCC"}; A\0 B B\0 C C C\0 字符型指针数组 char*pa[3]={"a","bb","ccc"}; pa[0]pa[1]pa[2] 可以重新赋值gets(pa[2]);

第七章字符数组与指针练习题参考答案

第七章字符数组与字符串 【题7.29】下面是对s的初始化,其中不正确的是。 A)char s[5]={“abc”};B)char s[5]={‘a’,‘b’,‘c’}; C)char s[5]=“”;D)char s[5]=“abcdef”; 【题7.30】下面程序段的运行结果是。 char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’}; printf(“%s”,c); A)‘a’‘b’ B)ab C)ab c 【题7.31】对两个数组a和b进行如下初始化 char a[]=“ABCDEF”; char b[]={‘A’, ‘B’,‘C’,‘D’,‘E’,‘F’}; 则以下叙述正确的是。 A)a与b数组完全相同B)a与b长度相同 C)a和b中都存放字符串D)a数组比b数组长度长 提示:‘\0’是字符串结束的标志 【题7.32】有两个字符数组a、b,则以下正确的输入格式是。 A)gets(a,b); B)scanf(“%s %s”,a,b); C)scanf(“%s %s”,&a,&b);D)gets(“a”),get(“b”); 【题7.33】有字符数组a[80]和b[80],则正确的输出形式是。 A)puts(a,b); B)printf(“%s %s”,a[],b[]); C)putchar(a,b); D)puts(a),puts(b); 【题7.34】下面程序段的运行结果是。 char a[7]=“abcdef”; char b[4]=“ABC”; strcpy(a,b); printf(“%c”,a[5]); A)空格B)\0 C)e D)f 提示:复制后a[0]=‘A’,a[1]=‘B’,a[2]=‘C’,a[3]=‘\0’, a[4]=‘e’,a[5]=‘f’, a[6]=‘\0’,

字符数组,字符指针,sizeof,strlen总结

[cpp] 字符数组,字符指针,sizeof,strlen总结 作者:Hui Wang来源:博客园发布时间:2011-03-26 14:22 阅读:728 次原文链接[收藏]对于字符数组与字符指针: 1. 以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写"abc",那么编译器帮你存储的是"abc\0". 2. 字符串直接量作为字符指针的初始值 "hello"是一个字符串直接量,编译器将其作为const char*处理,与之相关联的内存空间位于内存的只读部分,即允许编译器重用指向等价字符串直接量的引用以优化内存使用, 即使程序中使用了字符串直接量500次,编译器在内存中也只是创建了一个实例。例如: char *ptr = “hello”; 等价于const char *ptr = “hello”; 字符串直接量"hello"关联的是只读内存,如果试图修改将出错,例如ptr[1] = …a?;是会引起错误的。 3. 字符串直接量作为基于栈的字符数组的初始值 由于基于栈的变量不可能引用其他地方存储的内存,编译器会负责将字符串直接量复制到基于栈的数组内存中。 例如: char stackArray[] = “hello”; 做如下修改: stackArray[1] = …a?;是真确的。 4. 字符数组与字符指针 字符数组的形式如下,会将字符直接量拷贝到栈上: char str[] = "abc"; // 实际的数据存储: a b c \0,也就是增加了一个终结符\0 char str[3] = {'a','b','c'}; // 实际的数据存储: a b c,并没有在最后添加终结符 char str[10] = {'a','b','c'}; // 实际的数据存储: a b c \0 \0 \0 \0 \0 \0 \0 字符指针的形式如下: char *str = “abc”;// 实际的数据存储: a b c \0,也就是增加了一个终结符\0 5. 类型的决定 1). 数组的类型是由该数组所存放元素的类型以及数组本身的大小决定的 如char s1[3]和char s2[4],s1的类型就是char[3],s2的类型就是char[4],也就是说尽管s1和s2都是字符数组,但两者的类型却是不同的。 2). 字符串常量的类型可以理解为相应字符常量数组的类型 如"abcdef"的类型就可以看成是const char[7],也就是说实际的数据存储为"abcdef\0"。 3). 函数参数列表中的以数组类型书写的形式参数,编译器把其解释为普通的指针类型

指针经典练习题及答案

二、程序题 1、计算字符串中子串出现的次数。要求:用一个子函数subString()实现, 参数为指向字符串和要查找的子串的指针,返回次数。 2、加密程序:由键盘输入明文,通过加密程序转换成密文并输出到屏幕上。 算法:明文中的字母转换成其后的第4个字母,例如,A变成E(a变成e), Z变成D,非字母字符不变;同时将密文每两个字符之间插入一个空格。 例如,China转换成密文为G l m r e。 要求:在函数change中完成字母转换,在函数insert中完成增加空格, 用指针传递参数。 3、字符替换。要求用函数replace将用户输入的字符串中的字符t(T)都替换为e(E), 并返回替换字符的个数。 4、编写一个程序,输入星期,输出该星期的英文名。用指针数组处理。 5、有5个字符串,首先将它们按照字符串中的字符个数由小到大排列, 再分别取出每个字符串的第三个字母合并成一个新的字符串输出 (若少于三个字符的输出空格)。要求:利用字符串指针和指针数组实现。 6、定义一个动态数组,长度为变量n,用随机数给数组各元素赋值, 然后对数组各单元排序,定义swap函数交换数据单元,要求参数使用指针传递。7、实现模拟彩票的程序设计:随机产生6个数字,与用户输入的数字进行比较, 输它们相同的数字个数(使用动态内存分配)。 /*1、计算字符串中子串出现的次数。要求:用一个子函数subString()实现, 参数为指向字符串和要查找的子串的指针,返回次数。*/ #include int subString(char *a, char *b) { int i = 0; int j = 0; int m = 0; char *p = b; while(*a) { while(*a) { if(*a == *b) { break; } a++; } while(*b) { if(*a != *b)

第8章 指针-3字符数组和字符指针 - 字符串的表示与存储

第8章指针——字符数组与字符指针:字符串的表示与存储

printf("How are you"); H o w a r e y o u \0

printf("How are you.\n "); printf("\"How are you.\"\n"); How are you. _ printf("How are you. Press \ a key and then press Enter:\n"); How are you. Press a key and then press Enter: _ "How are you." _ printf("How are you. Press " "a key and then press Enter:\n"); 问题:如果字符串太长,怎么表示?

?C语言没有提供专门的字符串数据类型 ?字符数组——每个元素都是字符类型的数组 H o w a r e y o u 0 H o w a r e y o u \0

?字符数组的定义 #define STR_LEN 80 char str[STR_LEN+1]; ?字符数组的初始化 用字符常量的初始化列表对数组初始化 char str[6] = {'C','h','i','n','a','\0'}; 用字符串常量直接对数组初始化 char str[6] = {"China"}; char str[6] = "China"; char str[ ] = "China"; char char str[10] = "China";

?字符指针就是指向字符串首地址的指针 ?定义一个字符指针,使其指向一个字符串常量 H e l l o C h i n a \0

字符串指针和字符数组,静态全局、静态局部、全局和局部变量区别,字符串常量和字符串变量,程序的内存分配

最近工作之余,发现了两个自己在C语言学习中的难点,一个是字符串指针和字符数组的区别,一个就是静态全局变量、静态局部变量、全局变量和局部变量的区别,在网上查了不少资料,收获良多,现在与大家分享,有错误的地方请大家指正! 以下程序用VC++6.0调试 先说说字符串指针和字符数组的区别 1.相同点: /* 用字符数组实现字符串操作*/ main( ) { char str[]="Welcome to study C !"; int i; printf("%s\n",str); for (i=0;i<=7;i++) printf("%c",str[i]); //用*(str+i)也行 printf("\n"); } /* 用字符指针实现字符串操作*/ main() { char *str="Welcome to study C !"; int i; printf("%s\n",str); for(i=0;i<=7;i++) printf("%c",*(str+i)); //用str[i]也行 printf("\n"); } 2.不同点: a)赋值方式不同,字符数组只能对各个元素分别赋值,而字符指针只需赋给字符串的 首地址就可以了。 如: char *str; str="Welcome to study C !"; 以下对字符数组的赋值是错误的: char str[80]; str[ ]="Welcome to study C !"; b)字符指针指向字符串,"hello"是一个字符串常量,与之相关联的内存空间位于内 存的只读部分,如: char ch[] = "china\n"; char *p; char *pp = "CHINA\n"; p = ch; *(p+2) = 'h';//就是可以的 *(pp+2) = 'h';//此处在编译时不会出错,在执行的时候会出错

实验4(数组、指针、字符串)

实验二C++程序设计基础 一、实验目的 (1)、学习并掌握指针的性质 (2)、掌握指针参数的运用,进一步掌握引用的使用方法 (3)、学习函数指针的应用和带参数的main函数 (4)、学习掌握指针与引用、指针与数组、指针与字符串的用法 二、实验内容及步骤 1、选择题 (1)已知一函数的形参说明为int arr[5][6],在下列说明中,与此等效的形参说明为__________。 A. int arr[][] B. int [5][] C. int *a[6] D. int (* a)[6] (2)已知函数f的原型是:int f(char a,char * b=NULL,double c=0.0); 则下列调用中,不能正确地调用f函数的是__________ 。 A. f(99) B. f(‘A’,4.5) C. f(‘A’,”123”) D. f((char)65,”123”) (3)已知函数f的原型为:void f(int &a,char *b); 变量s,t的定义是:int s; char t[]=”ABCD”;把s和t分别作为第一参数和第二参数来调用函数f,正确的调用语句是:__________ 。 A. f(&s,&t); B. f(&s,t); C. f(s,t); D. f(s,&t); (4)若指针p定义为const char *p="Luchy!"; 则[ ]。 A) p所指向的数据不可改变,p在定义时可以不初始化。 B) p所指向的数据不可改变,p在定义时必须初始化。 C) p本身不可改变,p在定义时可以不初始化。 D) p本身不可改变,p在定义时必须初始化。 (5)已知数组A和指针p定义为:int A[20][10],*p;,要使p指向A的首元素,正确的赋值表达式是[ ]。 A) p=&A 或p=A[0][0] B) p=A 或p=&A[0][0] C) p=&A[0] 或p=A[0][0] D) p=A[0] 或p=&A[0][0] (6)已知函数func的原形是 double func(doouble *pd,int &ri); 变量x和y的定义是 double x; int y; 把x和y分别作为第一参数和第二参数来调用函数func,正确的调用语句是[ ]。 A) func(x,&y); B) func(&x,y); C) func(&x,&y); D) func(x,y); (7)若指针p定义为char * const p="Luchy!"; 则[ ]。 A) p所指向的数据不可改变,p在定义时可以不初始化。 B) p所指向的数据不可改变,p在定义时必须初始化。

指向字符串的指针数组

在初学习C语言时,对于指针是最容易让人迷糊的,尤其对于指针数组,而且是指向字符串的指针数组,恐怕就更难理解了。下面本人给出一个例子,详细讲解指向字符串的指针数组的使用情况。希望给予学习C的朋友一点帮助。 下述程序执行后,输出结果是什么? #include char *p[2][3]={ "abc","defgh","ijkl","mnopqr","stuvw","xyz"}; main(){ printf("%c\n",***(p+1)); printf("%c\n",**p[0]); printf("%c\n",(*(*(p+1)+1))[4]); printf("%c\n",*(p[1][2]+2)); printf("%s\n",**(p+1)); } 答案是: m a w z mnopqr 答案解析: 这里相当于定义了2行3列共6个元素的数组,数组的每一个元素都是指向字符的指针变量。 其中p[0][0]指向串"abc",p[0][1]指向串"defgh",p[0][2] 指向串"ijkl",p[1][0]指向串"mnopqr",p[1][1]指向串"stuvw",p[1][2] 指向串"xyz"。 1、printf("%c\n",***(p+1)); 这里的***(p+1)相当于*(*(*(p+1)+0)+0),而*(*(p+1)+0)+0)的另一种容易懂的形式是p[1][0],在多维数组中这两种写法等价。如上面所写的p[1][0]是指向串"mnopqr",即保存的是串"mnopqr"的首地址,也即字母m的地址。因此***(p+1)是字母m 2、printf("%c\n",**p[0]); 这里的**p[0]等价于*(*(*(p+0)+0)+0),也即*(p[0][0]),而p[0][0])指向串"abc",所以*(p[0][0])是字符a 3、printf("%c\n",(*(*(p+1)+1))[4]); (*(*(p+1)+1))[4]等价于*((p[1][1])+4),而(p[1][1])指向串"stuvw",所以*((p[1][1])+4)是在串首向后移动4个单位的字符,也即w 4、printf("%c\n",*(p[1][2]+2)); 因为p[1][2]指向串"xyz",而p[1][2]+2 就是串首向后移动2个字节(一个字节保存一个字符),也就是指向字符z,所以*(p[1][2]+2)是字符z

C、C++字符串指针(指向字符串的指针)

C、C++字符串指针(指向字符串的指针) C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这里我们来演示一下: #include #include #include int main(){ char str[] = "hello world !"; int len = strlen(str), i; //直接输出字符串 printf("%s\n", str); //每次输出一个字符 for(i=0; i #include #include

int main() { char str[] = "hello world !"; char *pstr = str; int len = strlen(str), i; //使用*(pstr+i) for (i = 0; i

字符串,字符数组,字符指针

字符数组,字符指针,字符串 char a[]="hello world"; char* b="hello world"; string c="hello wolrd"; cout<

函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序

一、填空题:给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 #define M 8 void fun(char (*ss)[M]) {char *ps[N],*tp; int i,j,k; for(i=0; i for(i=0; i< p> /**********found**********/ k= __1__ ; for(j=i+1; j<> /**********found**********/ if(strlen(ps[k]) < strlen(__2__)) k=j; /**********found**********/ tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ; } printf("\nThe string after sorting by length:\n\n"); for(i=0; i<> } main() {char ch[N][M]={"red","green","blue","yellow", "black"}; int i; printf("\nThe original string\n\n"); for(i=0;i<> fun(ch); } 解题答案: /**********第一空**********/ k= i ; /**********第二空**********/ if(strlen(ps[k]) < strlen(ps[j])) k=j; /**********第三空**********/ tp=ps[i]; ps[i]=ps[k]; ps[k]= tp ; ******************************************

C语言复习提纲第六章指针2

6.3 字符串与指针 前言 字符串是通过数组来存放的,因此字符串的表现形式可以是:字符数组与字符指针。 一. 字符数组与字符指针的有关概念(P257-P259:10.4.3) 1.定义与初始化 z假设有如下定义: char s1[20]="ASDFGHJ", *s2="ASDFGHJ"; 则:s1是存放字符串的字符数组,s2是指向字符串的指针变量。 (a) 字符数组(b) 字符指针变量 z二者区别: ?字符数组:由若干个元素组成,每个元素存放字符串的一个字符;对字符数组初始化是把字符串放到数组中;s1最多可存储20个字符; ?字符指针:存放的是(char型数据的)地址;对字符指针初始化是把地址(如字符串常量或字符数组的首地址)赋给指针变量;字符串长度不受限定。 2.赋初值 z对字符数组用赋值语句赋值,只能逐个元素进行,不能对整个数组名赋值,因为数组名是地址常量;字符指针变量可以用赋值语句赋地址。 例:char s1[20]; s1[20]= "ASDFGHJ"; × s1="ASDFGHJ"; × char *s2; s2="ASDFGHJ"; √ ?s2中获得的是"ASDFGHJ"字符串常量的首地址。在C/C++中,系统为字符串常量在内存都分配了存储地址(如同字符数组一样处理)。 3.读入字符串(从键盘) z不能对没有指向的字符指针变量从键盘进行输入操作,因为键盘输入的字符串没有存储地址。 例:char *s2; cin>>s2; × z正确方法:将指针指向有效存储空间(如字符数组)后在输入。 例:char s1[20],*s2; s2=s1; cin>>s2; √ cin>>*s2; ×

字符串与指针

一、 C语言中,为什么字符串可以赋值给字符指针变量 char *p,a='5'; p=&a; //显然是正确的, p="abcd"; //但为什么也可以这样赋值?? 问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点! 答: 双引号做了3件事: 1.申请了空间(在常量区),存放了字符串 2. 在字符串尾加上了'/0' 3.返回地址 你这里就是返回的地址赋值给了 p 二、 char *p = “hello”; 上边的表达式为什么可以,而把p换成数组,然后再赋值就不行了 解释: 字符串常量"hello"出现在一个表达式中时,"hello"表达式使用的值就是这些字符所存储的地址(在常量区),而不是这些字符本身。 所以,可以把字符串赋值给指向字符的指针p,而不能把字符串赋值给一个字符数组。 char a[10] = “hello”; //这样可以,这种情况是c语言初始化所支持的 如果写成char a[10] 然后a = “hello” 这样就错误了。 同样是a数组,char a[10] = “hello”;这种是数组的初始化,和a[0] = ‘h’ a[1] = ‘e’…是一个道理 但是换成char a [10] 然后a = “hello”就不行了“hello”赋值的值是一个地址,而a虽然也有地址,但是这与指针是不一样的,指针的值是地址,而数组的值虽然也是地址,但是却是一个常量,所以不能给常量赋值。 三、 标题:对字符数组,字符指针,字符串常量 原帖地址:https://www.doczj.com/doc/b13815827.html,/25069424.html

1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符,如在代码中写 "abc",那么编译器帮你存储的是"abc\0" 2."abc"是常量吗?答案是有时是,有时不是。 不是常量的情况:"abc"作为字符数组初始值的时候就不是,如 char str[] = "abc"; 因为定义的是一个字符数组,所以就相当于定义了一些空间来存放"abc",而又因为 字符数组就是把字符一个一个地存放的,所以编译器把这个语句解析为 char str[3] = {'a','b','c'}; 又根据上面的总结1,所以char str[] = "abc";的最终结果是 char str[4] = {'a','b','c','\0'}; 做一下扩展,如果char str[] = "abc";是在函数内部写的话,那么这里的"abc\0"因为不是常量,所以应该被放在栈上。 是常量的情况:把"abc"赋给一个字符指针变量时,如 char* ptr = "abc"; 因为定义的是一个普通字符指针,并没有定义空间来存放"abc",所以编译器得帮我们 找地方来放"abc",显然,把这里的"abc"当成常量并把它放到程序的常量区是编译器 最合适的选择。所以尽管ptr的类型不是const char*,并且ptr[0] = 'x';也能编译 通过,但是执行ptr[0] = 'x';就会发生运行时异常,因为这个语句试图去修改程序 常量区中的东西。 记得哪本书中曾经说过char* ptr = "abc";这种写法原来在c++标准中是不允许的, 但是因为这种写法在c中实在是太多了,为了兼容c,不允许也得允许。虽然允许, 但是建议的写法应该是const char* ptr = "abc";这样如果后面写ptr[0] = 'x'的 话编译器就不会让它编译通过,也就避免了上面说的运行时异常。 又扩展一下,如果char* ptr = "abc";写在函数体内,那么虽然这里的"abc\0"被 放在常量区中,但是ptr本身只是一个普通的指针变量,所以ptr是被放在栈上的, 只不过是它所指向的东西被放在常量区罢了。

实验六 数组、指针与字符串 评讲

姓名:学号:班级: 2012计本 实验六数组、指针与字符串(4学时) ?实验目的 (1)学习使用数组数据对象 (2)学习字符串数据的组织和处理 (3)学习标准C++库的使用 (4)掌握指针的使用方法 (5)练习通过Debug 观察指针的内容及其所指的对象的内容 (6)练习通过动态内存分配实现动态数组,并体会指针在其中的作用(7)分别使用字符数组和标准C++库练习处理字符串的方法 ?实验任务 1)以例6-3为基础,观察对象数组的声明与引用过程,并与单对象的 引用过程的区别。 2)以例6-10为基础,观察用指针作为函数参数传递数据的方法,进一 步理解值传递与引用传递的思想 3)以例5-11为基础,完成例 5-25,比较二者的异同 4)编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 5)使用动态内存分配生成动态数组来重新完成第(4)题,使用指针 实现函数功能 6)编程实现两字符串的连接。要求使用字符数组保存字符串,不要使 用系统函数。 7)使用string类声明字符串对象,重新实现第(6)。 8)声明一个Employee类,其中包括姓名、街道地址、城市和邮编等 属性,以及change_name()改变对象的姓名属性,实现并测试这个 类。

9)声明包含5个元素的对象数组,每个元素都是Employee类型对 象。 评讲部分 4)编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 #include using namespace std; void move (int matrix[3][3]) { int i, j, k; for(i=0; i<3; i++) for (j=0; j> data[i][j]; } cout << "输入的矩阵的为:" << endl; for(i=0; i<3; i++) { for (j=0; j<3; j++) cout << data[i][j] << " "; cout << endl; } move(data); cout << "转置后的矩阵的为:" << endl; for(i=0; i<3; i++) { for (j=0; j<3; j++) cout << data[i][j] << " "; cout << endl; } }

实验六--数组、指针与字符串-评讲

姓名:学号: 班级: 2012计本 实验六数组、指针与字符串(4学时) 实验目的 (1)学习使用数组数据对象 (2)学习字符串数据的组织和处理 (3)学习标准C++库的使用 (4)掌握指针的使用方法 (5)练习通过Debug 观察指针的内容及其所指的对象的内容 (6)练习通过动态内存分配实现动态数组,并体会指针在其中的作用 (7)分别使用字符数组和标准C++库练习处理字符串的方法 实验任务 1)以例6-3为基础,观察对象数组的声明与引用过程,并与单对象的 引用过程的区别。 2)以例6-10为基础,观察用指针作为函数参数传递数据的方法,进一 步理解值传递与引用传递的思想 3)以例5-11为基础,完成例 5-25,比较二者的异同 4)编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 5)使用动态内存分配生成动态数组来重新完成第(4)题,使用指针 实现函数功能

6)编程实现两字符串的连接。要求使用字符数组保存字符串,不要使 用系统函数。 7)使用string类声明字符串对象,重新实现第(6)。 8)声明一个Employee类,其中包括姓名、街道地址、城市和邮编等 属性,以及change_name()改变对象的姓名属性,实现并测试这个类。 9)声明包含5个元素的对象数组,每个元素都是Employee类型对 象。 评讲部分 4)编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 #include using namespace std; void move (int matrix[3][3]) { int i, j, k; for(i=0; i<3; i++) for (j=0; j> data[i][j]; } cout << "输入的矩阵的为:" << endl; for(i=0; i<3; i++) { for (j=0; j<3; j++) cout << data[i][j] << " "; cout << endl; } move(data);

【第四版课后习题答案】 第06章 数组、指针与字符串

第六章数组、指针与字符串 6-1 数组A[10][5][15]一共有多少个元素? 解: 10×5×15 = 750 个元素 6-2 在数组A[20]中第一个元素和最后一个元素是哪一个? 解: 第一个元素是A[0],最后一个元素是A[19]。 6-3 用一条语句定义一个有五个元素的整型数组,并依次赋予1~5的初值。 解: 源程序: int IntegerArray[5] = { 1,2,3,4,5 }; 或:int IntegerArray[] = { 1,2,3,4,5 }; 6-4 已知有一个数组名叫oneArray,用一条语句求出其元素的个数。 解: 源程序: nArrayLength = sizeof(oneArray) / sizeof(oneArray[0]); 6-5 用一条语句定义一个有5×3个元素的二维整型数组,并依次赋予1~15的初值。 解: 源程序: int theArray[5][3] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; 或:int theArray[5][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15} }; 6-6 运算符*和&的作用是什么? 解: *称为指针运算符,是一个一元操作符,表示指针所指向的对象的值;&称为取地址运算符,也是一个一元操作符,是用来得到一个对象的地址。 6-7 什么叫做指针?指针中储存的地址和这个地址中的值有何区别? 解: 指针是一种数据类型,具有指针类型的变量称为指针变量。指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的内容。 6-8 声明一个整型指针,用new语句为其分配包含10个整型元素的地址空间。

实现字符串拷贝函数,把一个指定的字符串复制到指定的字符数组或字符指针中。返回指向复制后字符串的指针。

1. 实现字符串拷贝函数,把一个指定的字符串复制到指定的字符数组或字符指针中。该函数返回指向复制后的字符串的指针。用指针和数组实现保存为1.cpp #include #include using namespace std; char * my_strcpy(char *src, char *dest) { char *d = dest; //backup input char *s = src; int src_len = 0; assert(dest); //非空指针检查 assert(src); src_len = strlen(src) + 1;//src length if(src == dest) //src 与dest起始地址一样,不用拷贝,直接返回src return src; else if(src

} else { while(src_len--) *d++=*s++; //正拷贝 } return dest; } void main() { char src[20]; char dest[40]; cout<<"please input a string to src:"<>src; cout<<"拷贝后,dest中的字符串为:"< #include #include

相关主题
文本预览
相关文档 最新文档