指向字符串的指针变量

合集下载

(完整版)C语言考试题库之判断题(2)

(完整版)C语言考试题库之判断题(2)
正确
68、指针变量,只能作为函数的形参,不可以作函数的实参(1分)
正确
69、文件指针用于指向文件,文件只有被打开后才有对应的文件指针。(1分)
正确
70、C语言是一种非结构化程序设计语言。(1分)
错误
71、在C语言程序中,凡是没有出现存储类说明符的变量都是自动类的。(1分)
正确
72、在switch语句中,多个case可以共用一组执行语句。(1分)
错误
15、do-while循环的while后的分号可以省略。(1分)
错误
16、用字符串方式赋值比用字符逐个赋值要多占一个字节,用于存放字符串结束标志'\0'。
正确
17、C语言函数返回类型的默认定义类型是void(1分)
错误
18、可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数(1分)
正确
87、枚举类型中的元素都具有一个整型值。(1分)
正确
88、文件是否打开是可以判断的。(1分)
正确
89、C语言的应用比较广泛,不仅可用来编写应用软件,而且可用来编写系统软件。(1分)
正确
90、C语言程序中,出现非法字符时会发出错误信息。(1分)
正确
91、C语言的书写格式不会影响程序的可读性。(1分)
错误
错误
131、字符串在内存中的起始地址称为字符串的指针,可以定义一个字符指针变量指向一个字符串(1分)
正确
错误
107、double型变量在内存中占的字节数比int型变量在内存中占的字节数多。(1分)
正确
108、循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。(1分)
正确
109、C语言标准输出操作中,putchar()函数可以输出显示一个字符串。(1分)

为什么字符串可以赋值给字符指针变量?

为什么字符串可以赋值给字符指针变量?

为什么字符串可以赋值给字符指针变量?⼀、C语⾔中,为什么字符串可以赋值给字符指针变量?char *p;a='5';p=&a; //显然是正确的,p="abcd"; //但为什么也可以这样赋值??问:⼀直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点!答:双引号做了3件事:1.申请了空间(在常量区),存放了字符串2. 在字符串尾加上了'/0'3.返回地址你这⾥就是返回的地址赋值给了 p⼆、char *p = “hello”; 表达式为什么可以,⽽把p换成数组,然后再赋值就不⾏了解释:别说换成数组,就是 char *pch1 = 'h'; 都是不可以的,因为双引号做了3件事,别的都不会做。

字符串常量"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虽然也有地址,但是这与指针是不⼀样的,指针的值是地址,⽽数组的值虽然也是地址,但是却是⼀个常量,所以不能给常量赋值。

指向字符串的指针和二级指针

指向字符串的指针和二级指针
Zhang Wang pp Z W L pp pp \0 h a i a n \0 n g g \0 \0
pp
Li
第8章
指 针
8.2指向字符串的指针变量
1. 让一个字符指针变量指向字符串的方法 1)在指针变量初始化时。格式是: char *<指针变量名>=<字符串常量> 例如:char *ptr=“beijing is a beautiful city” 2)在程序中直接将字符串常量赋给一个字符型指针变 量.格式是: char *<指针变量名> <指针变量名>=<字符串常量> 例如:char *p; p=“it is a very good”;
int week; printf("Enter week No.: "); 利用字符指针数组处理长度不等的字符串,可节省 存储空间。 scanf("%d",&week); if (week>=0 && week<7)
printf("week No.%d —— %s\n",week,weekname[week]);
8.2 指针与数组
8.2.2 指向字符串的指针变量 【例8.1】分析下列程序的两条puts()语句,分别输出 什么?
#include “stdio.h” main() {
char *ptr=“beijing is a beautiful city”; puts(ptr); ptr=“it is very good”; puts(ptr);
}
8.2 指针与数组
8.2.4 多级指针 二级指针变量定义的一般形式: 1. 二级指针变量的定义 数据类型标识符 **指针变量名; 如果一个指针的目标变量是一个指针类型 其中“**指针变量名”相当于*(*指针变量名), 变量,则此指针为指向指针的指针变量,也称 在括号中定义了一个指针变量,括号外的“*”,说明 为多级指针变量。 指针变量(即二级指针)的目标变量是一个指针类型

指向字符串的指针

指向字符串的指针
char ch[6] = "Hello";
cout<<"字符数组的长度为:"<<strlen(ch)<<endl;
Character string(p,ch);
string.display();
string.display1();
return 0;
}
/*
在VC++6.0中的输出结果为:
/*
功能:测试字符串指针的应用
注意字符数组与字符串指针的区别:
字符数组名是个静态的地址,指向数组的首地址(也就是第一个元素的地址)
字符串指针则是动态的,也指向字符串的首地址
char * p;
p = "Hello" //实际上就是将字符串Hello的首地址赋给指针变量P;
在输出时:cout<<p<<endl;//p代表整个字符串
cout<<&p<<endl; //输出为:指针变量p的地址
cout<<*p<<endl; //输出为:H
cout<<p+1<<endl; //输出为:ello,p+1 为从第二个字符的地址
cout<<&(*p)<<endl; //输出为Hello &(*p)等价于p
{
this->p = p;
for(int i=0;i<6;i++)
ch[i] = ch1[i];
}
void display()
{

C语言程序设计(判断题专项练习)及答案

C语言程序设计(判断题专项练习)及答案

计算机C语言(判断题专项练习)及答案一、基础知识(每小题1 分,共 10分)()1、程序调试就是找出并改正c源程序中的语法错误。

()2、一个变量的数据类型被强制转换后,它将保持被强制转换后的数据类型。

()3、在标准c语言中,共用体变量中的各成员是共同占用一块存储空间()4、赋值运算符的结合方向为自右向左。

()5、c语言的标识符由字母、数字和下划线组成,其中第一个字符必须是字母或下划线。

()6、在c程序中, aph和Aph 是两个相同的变量()7、计算机语言(computer language)是人与计算机之间通讯的语言。

()8、在c语言中,当一个逻辑表达式的值为"假"时,该表达式的值一定是 0()9、在c程序中,abc与ABC是两个相同的变量。

()10、c语言中sizeof 是函数,而不是运算符。

二、控制结构(每小题1 分,共 10分)()1、if 语句后面的表达式只能是关系表达式()2、在switch语句中,可以根据需要使用或不使用break语句。

()3、在标准c中,逻辑表达式中只允许出现逻辑型数据。

()4、逻辑表达式的值只能为1或0。

()5、c程序中if语句可以单独存在。

()6、省略else的if语句的一般形式如下,若表达式的值为"真",则执行语句1;否则,就什么也不做。

if (表达式) 语句1()7、在if语句中,必须出现else。

()8、内层break语句可以终止嵌套的switch,使最外层的switch结束。

()9、switch语句中的default必须出现在所有case之后。

()10、switch语句中,每一个case的冒号后面都必须至少跟有一条语句。

三、循环结构(每小题1 分,共 10分)()1、for循环的三个表达式可以任意省略,while,do-while也是如此。

()2、选择结构( if 语句)和循环结构都可以使用嵌套形式()3、在循环过程中,使用break语句和continue语句的作用是一样的()4、无论哪种循环语句,都必须给出循环结束条件。

字符串字符指针

字符串字符指针

gets(st1);
/*输入字符串st1*/
scanf("%s",st2); /*输入字符T串hists2*i/ s a book
puts(st1);
/*输出字符t串hists1*/
puts(st2);
/*输出字符串st2*/
}
从上面的运行结果,可以看出当输入的字符串中含有空格时, 使用gets()和scanf()输出的不同。
2
1.1 指向字符串的指针
字符指针变量初始化的方法有以下两种形式: (1)在定义指针变量的同时进行初始化 例如: char *sp={“Welcome”}; 或
char *sp="Welcome"; 需要特别注意的是:对字符指针初始化就是将字符串的首地 址赋值给指针变量,而不是将字符串本身复制到指针中。 (2)使用赋值语句来初始化指针变量 可以将需要处理的字符串直接赋值给已经定义好的字符指针 变量,例如: char *s; … s="Welcome";
10
1.3 字符串处理函数
例5-21 字符串的输入示例 #include "stdio.h" void main()
程序运行结果是: input string:
{char st1[20],st2[20];
This is a book <回车>
printf("input string:\n"); this is a book <回车>
11
1.3 字符串处理函数
3.字符串连接函数s,str2)
功能:把字符数组str2中的字符串连接到字符数组str1 中
字符串的后面,并删去字符串1后的串标志“\0”。本函数返

c语言字符指针赋值

c语言字符指针赋值

c语言字符指针赋值C语言中,字符指针是一种特殊的指针类型,用于表示指向字符(字节)的指针。

字符指针在C语言中有着广泛的应用,特别是在处理字符串时非常常见。

在C语言中,字符串实际上是以字符数组的形式存储的,而字符指针则是指向字符数组的第一个元素的地址。

通过字符指针,我们可以方便地操作字符串,例如获取字符串的长度、复制字符串、连接字符串等。

要赋值一个字符指针,我们需要将一个地址值赋给指针变量。

这个地址值可以是一个字符数组的第一个元素的地址,也可以是一个字符串常量(字符数组)的地址。

示例如下:```c#include <stdio.h>int main() {char arr[] = "Hello World"; //定义一个字符数组并初始化char* ptr = arr; //将字符数组的第一个元素的地址赋给指针变量printf("arr: %s\n", arr); //输出字符数组printf("ptr: %s\n", ptr); //输出指针变量指向的字符串return 0;}```在上面的示例中,我们定义了一个字符数组`arr`,并将其初始化为字符串常量"Hello World"。

然后,我们将`arr`的第一个元素的地址赋给了字符指针`ptr`。

最后,通过`printf`函数分别输出了`arr`和`ptr`所指向的字符串。

除了将字符数组赋给字符指针外,我们还可以通过指针运算来改变指针的指向。

例如,通过递增字符指针的方式可以遍历字符串中的每个字符。

示例如下:```c#include <stdio.h>int main() {char str[] = "Hello";char* ptr = str;while (*ptr != '\0') { //通过指针运算遍历字符串printf("%c ", *ptr);ptr++;}return 0;}```在上面的示例中,我们定义了一个字符数组`str`,并将其初始化为字符串常量"Hello"。

c 有string类型的基础知识选择题

c 有string类型的基础知识选择题

c 有string类型的基础知识选择题全文共四篇示例,供读者参考第一篇示例:在C语言中,虽然没有内置的string类型,但我们可以使用字符数组来表示字符串。

下面是一些关于C语言中string类型基础知识的选择题:1. 在C语言中表示字符串的最常见方法是使用什么数据类型?A. intB. floatC. charD. double答案:C2. 下面哪种声明方式可以正确定义一个字符数组来存储字符串"Hello"?A. char str[6] = "Hello";B. char str[5] = "Hello";C. char str[] = "Hello";D. char str[5] = {'H', 'e', 'l', 'l', 'o'};4. 下面哪个函数用于计算字符串的长度?A. strlen()B. strcpy()C. strcat()D. strcmp()9. 字符串"Hello World"的长度是多少?A. 10B. 11C. 12D. 13第二篇示例:1. 在C语言中,字符串类型是以哪种方式进行表示的?A. 数组B. 结构体C. 指针D. 链表2. 下列哪种数据类型用于表示字符串的结尾?A. charB. intC. floatD. null4. 下列哪个函数用于比较两个字符串是否相等?A. strlen()B. strcpy()C. strcmp()D. strcat()11. 在C语言中,如何声明一个字符串变量?A. char str;B. char *str[];C. char str[];D. char *str;12. 下列哪个语句用于初始化一个字符串变量?A. str = "hello";B. strcpy(str, "hello");C. str = {'h', 'e', 'l', 'l', 'o', '\0'};D. str = "hello\0";15. 在C语言中,如何将一个整数转换为字符串?A. itoa()B. atoi()C. atof()D. sprintf()答案:1. A2. D3. D4. C5. A6. B7. D8. D9. D10. A11. D12. B13. A14. A15. D希望以上选择题能帮助大家更好地了解C语言中关于字符串类型的基础知识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

❖}
❖ encrypt(char *s)
❖ { for(; _*s_!=‘_\0’ ;s++)

if(*s==‘z’)

_ _ _*s=_‘a’_ _ _ _ _

else

_ _*_s=*_s+_1; _ _ _ _
❖}

作业:
❖ 练习册p121-124

void strcpy(char *p,char *q)

{ while(*q!=‘\0’)

{ *p=*q;

p++;

q++;

}

}
典型例题2:编写程序输出以下图形
❖ 用字符数组实现

#include<stdio.h>

main()

{ char s[ ]=“*****”;

int i;

4、要处理字符串中的单个字符,则通过数组下标或者字符
指针的间接访问。
但是两个定义的差别很大:
char ch[ ] 定义一个数组,ch是一个足以存放字 符串和空字符‘\0’的一维数组的名字,也是首地址, 它是一个常量,一旦定义,即使该数组中存储的字符 串发生改变,它也不发生变化,总是指向同一存储区。
例如: char *p=“abc” ; printf(“%c\n”,*p);
p
a
p+1
b
p+2
c
printf(“%s\n”,p);
\0
printf(“%s” ,p+1);
输出结果为:
a
abc
注意:
bc
1、赋值时,字符串的结束标志‘\0’是系统自动增加的。 2、字符串在内存中连续存放。
3、在输出/输入字符串时,如果只指出数组名或者指针变量, 则是处理整个数组。
for (i=0;s[i]!=‘\0’;i++)

printf(“%s\n”,s+i);

}
***** **** *** ** *
用字符指针实现

#include<stdio.h>

main()

{ char *p=“*****”;

for(;*p;)

printf(“%s\n”,p++);

}
思考:
❖ main()
❖ { char line[MAXLINE];
❖ printf(“Input the string:”); ❖ _ge_ts(l_ine_); _ _ _ _ _
❖ encrypt(line);
❖ printf(“%s%s\n”,”After being encrypted:”,line);
❖ 编写程序输出以下图形:

*

**

***

****

*****

#include<stdio.h>

main()

{ char *p=“*****”,*q;ቤተ መጻሕፍቲ ባይዱ

for(q=p+4;q>=p;q--)

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

}
学生练习:

#include<stdio.h>

#include<string.h>
•字符串的两种表示形式:
1、字符数组的方式实现: char ch[ ]=“this is a book!” ;
使用数组的下标可以逐个访问字符串中 的字符,还可以用%s格式整体输入输出 例如:
for(i=0;ch[i]!=‘\0’;i++) printf(“%c”,ch[i]);
printf (“%s\n” ,ch);
❖}
运行结果: 976531
为了防止信息被别人轻易窃取,需要把电
码明文通过加密方式变换成密文。变换规 则如下:小写z变为a,其它字母变换为该 字母ASCII码顺序后1位的字母,比如Q变
换为P.
❖ #include<stdio.h>
❖ #include<string.h>
❖ #define MAXLINE 100
char *p中的 p是一个指针,其初值指向一个字符 串常量,它存放的是该字符串的首地址(并不是该字 符串的内容),之后它还可以被修改指向其他字符串, 那么它就改为指向其它存储区,值随之发生变化。
例:若字符数组mess和指向字符串的指针变量p的内 容发生了变化,测试mess和p的值是否发生变化。
❖ #include<stdio.h> ❖ char mess[]=“I am a student”; ❖ char *p=“China”; ❖ int i; ❖ main() ❖ { printf(“%d,%d\n”,mess,p); ❖ p=“Fuzhou”; ❖ i=0; ❖ while(mess[i]!=‘\0’) ❖ { mess[i]=mess[i+1]; i++;} ❖ printf(“%d,%d\n”,mess,p); ❖}

}
❖ main()
❖ { char s[]=“97531”,c;
❖ c=‘6’;
❖ fun(s,c);
❖ puts(c);
❖}
❖ fun(char *a,char b)
❖ { while(*(a++)!=‘\0’);
❖ while(*(a-1)<b)

*(a--)=*(a-1);
❖ *(a--)=b;
❖ 2、字符指针的方式实现: char *p=“this is a book!” ;
使用字符指针的间接访问运算符可以逐个 访问字符串中的字符,也可以使用%s格式 对字符串整体输入输出。 例如: for(;*p!=‘\0’;p++)
printf(“%c”,*p);
printf (“%s\n” ,p);

main()

{ int i=0,n=0;

char s[80],*p;

p=s;

strcpy(p,”It is a book.”);

for(;*p!=‘\0’;p++)

if(*p==‘ ’) i=0;

else if(i==0)
运行结果:n=4

{n++;i=1;}

printf(“n=%d\n”,n);
运行结果为: 404,421 404,434
典型例题1:编写字符串复制函数strcpy(s1,s2)
❖ 用数组实现

❖ void strcpy(char s1[ ],char s2[ ])

{ int i=0;

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

{ s1[i]=s2[i];

i++;

}

}
用指针实现
相关文档
最新文档