指向字符串的指针变量
指向字符串的指针变量

}
***** **** *** ** *
用字符指针实现
#include<stdio.h>
main()
{ char *p=“*****”;
for(;*p;)
printf(“%s\n”,p++);
}
思考:
编写程序输出以下图形:
*
**
***
****
*****
#include<stdio.h>
main()
{ while(*q!=‘\0’)
{ *p=*q;
p++;
q++;
}
}
典型例题2:编写程序输出以下图形
用字符数组实现
#include<stdio.h>
main()
{ char s[ ]=“*****”;
int i;
for (i=0;s[i]!=‘\0’;i++)
printf(“%s\n”,s+i);
{ while(*(a++)!=‘\0’);
while(*(a-1)<b)
*(a--)=*(a-1);
*(a--)=b;
}
运行结果: 976531
为了防止信息被别人轻易窃取,需要把电
码明文通过加密方式变换成密文。变换规 则如下:小写z变为a,其它字母变换为该 字母ASCII码顺序后1位的字母,比如Q变 换为P.
char *p中的 p是一个指针,其初值指向一个字符 串常量,它存放的是该字符串的首地址(并不是该字 符串的内容),之后它还可以被修改指向其他字符串, 那么它就改为指向其它存储区,值随之发生变化。
(完整版)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虽然也有地址,但是这与指针是不⼀样的,指针的值是地址,⽽数组的值虽然也是地址,但是却是⼀个常量,所以不能给常量赋值。
指向字符串的指针和二级指针

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. 二级指针变量的定义 数据类型标识符 **指针变量名; 如果一个指针的目标变量是一个指针类型 其中“**指针变量名”相当于*(*指针变量名), 变量,则此指针为指向指针的指针变量,也称 在括号中定义了一个指针变量,括号外的“*”,说明 为多级指针变量。 指针变量(即二级指针)的目标变量是一个指针类型
CC++字符串指针指向字符串的指针

C、C++字符串指针(指向字符串的指针)C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这里我们来演示一下:#include <stdio.h>#include <string.h>#include <iostream>int main(){char str[] = "hello world !";int len = strlen(str), i;〃直接输出字符串printf("%s\n", str);〃每次输出一个字符for(i=0; i<len; i++){printf("%c", str[i]);)printf("\n");return 0;)运行结果:hello world !hello world !字符数组归根结底还是一个数组,上节讲到的关于指针和数组的规则同样也适用于字符数组。
更改上面的代码,使用指针的方式来输出字符串:#include <stdio.h>#include <string>#include <iostream>int main() {char str[] = "hello world !";char *pstr = str;int len = strlen(str), i;〃使用*(pstr+i)for (i = 0; i<len; i++) {printf("%c", *(pstr + i));)printf("\n");〃使用pstr[i]for (i = 0; i<len; i++) {printf("%c", pstr[i]);)printf("\n");〃使用*(str+i)for (i = 0; i<len; i++) {printf("%c", *(str + i));)printf("\n");system("pause");return 0;)运行结果:hello world !hello world !hello world!除了字符数组,C语言还支持另外一种表示字符串的方法,就是直接使用一个指针指向字符串,例如:char *str = 11 11 ,3a l sll hello world !;或者:char *str;str = " hello world !";字符串中的所有字符在内存中是连续排列的,str指向的是字符串的第0个字符;我们通常将第0个字符的地址称为字符串的首地址。
指向字符串的指针

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()
{
变量的指针和指向变量的指针变量

1.变量的指针和指向变量的指针变量读起来很拗口,说白了就是变量的地址和用来存放变量地址的地址变量。
因为一个变量在编译的时候系统要为它分配一个地址,假如再用一个变量来存放这个地址,那么这个变量就叫做指向变量的指针变量,也就是用来存放变量地址的这么一个变量。
所谓"指向"就是指存放××的地址,如指向变量的指针变量,"指向"就是指用来存放变量的地址,再如指向数组的指针变量,"指向"就是指存放数组的地址。
只要理解了这个,指针也就不难了。
另外,还有指向字符串的指针变量,指向函数的指针变量,指向指针的指针变量等。
1) 指针变量的定义形式:类型标识符*标识符如:int *pointer;要注意两点:*表示pointer是个指针变量,在用这个变量的时候不能写成*pointer,*pointer 是pointer指向的变量。
一个指针变量只能指向同一个类型的变量。
如上面pointer只能指向int型变量。
2)指针变量的引用两个有关的运算符:& 取地址运算符&a 就代表变量a的地址* 指针运算符*a就代表变量a的值2.数组的指针和指向数组的指针变量数组的指针指数组的起始地址,数组元素的指针指数组元素的地址。
1)指向数组元素的指针变量的定义与赋值定义和指向变量的指针变量定义相同,c规定数组名代表数组的首地址,即第一个数组元素地址。
2)通过指针引用数组元素我们通常引用数组元素的形式是a,如果用指针可以这样引用,*(a+i),或定义一个指针变量p,将数组a的首地址赋给p,p=a;然后用*(p+i)引用。
注意:指针变量p指向数组a首地址,则p++指向数组a的下一元素地址,即a[1]的地址。
3)数组名作函数参数形参数组和实参数组之间并不是值传递,而是共用同一段地址,所以在函数调用过程中如果形参的值发生变化,则实参的值也跟着变化。
4)指向多维数组的指针和指针变量以二维数组为居多。
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、无论哪种循环语句,都必须给出循环结束条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h>
#include<string.h>
#define MAXLINE 100
main()
{ char line[MAXLINE];
printf(“Input the string:”); _ge_ts(l_ine_); _ _ _ _ _
encrypt(line);
{ while(*(a++)!=‘\0’);
while(*(a-1)<b)
*(a--)=*(a-1);
*(a--)=b;
}
运行结果: 976531
为了防止信息被别人轻易窃取,需要把电
码明文通过加密方式变换成密文。变换规 则如下:小写z变为a,其它字母变换为该 字母ASCII码顺序后1位的字母,比如Q变 换为P.
运行结果为: 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++;
}
}
用指针实现
void strcpy(char *p,char *q)
}
***** **** *** ** *
用字符指针实现
#include<stdio.h>
main()
{ char *p=“*****”;
for(;*p;)
printf(“%s\n”,p++);
}
思考:
编写程序输出以下图形:
*
**
***
****
*****
#include<stdio.h>
main()
}
作业:
练习册p121-124
printf (“%s\n” ,ch);
2、字符指针的方式实现: char *p=“this is a book!” ;
使用字符指针的间接访问运算符可以逐个 访问字符串中的字符,也可以使用%s格式 对字符串整体输入输出。 例如: for(;*p!=‘\0’;p++)
printf(“%c”,*p);
{ char *p=“*****”,*q;
for(q=p+4;q>=p;q--)
printf(“%s\n”,q);
}
学生练习:
#include<stdio.h>
#include<string.h>
main()
{ int i=0,n=0;
char s[80],*p;
p=s;
strcpy(p,”It is a book.”);
3、在输出/输入字符串时,如果只指出数组名或者指针变量, 则是处理整个数组。
4、要处理字符串中的单个字符,则通过数组下标或者字符
指针的间接访问。
但是两个定义的差别很大:
char ch[ ] 定义一个数组,ch是一个足以存放字 符串和空字符‘\0’的一维数组的名字,也是首地址, 它是一个常量,一旦定义,即使该数组中存储的字符 串发生改变,它也不发生变化,总是指向同一存储区。
printf (“%s\n” ,p);
例如: 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、字符串在内存中连续存放。
{ while(*q!=‘\0’)
{ *p=*q;
p++;
q++;
}
}
典型例题2:编写程序输出以下图形
用字符数组实现
#include<stdio.h>
main()
{ char s[ ]=“*****”;
int i;
for (i=0;s[i]!=‘\0’;i++)
printf(“%s\n”,s+i);
for(;*p!=‘\0’;p++)
if(*p==‘ ’) i=0;
else if(i==0)
{n++;i=1;}
printf(“n=%d\n”,n);
}
运行结果: n=4
main()
{ char s[]=“97531”,c;
c=‘6’;
fun(s,c);
puts(c);
Байду номын сангаас
}
fun(char *a,char b)
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); }
printf(“%s%s\n”,”After being encrypted:”,line);
}
encrypt(char *s)
{ for(; _*s_!=‘_\0’ ;s++)
if(*s==‘z’)
_ _ _*s=_‘a’_ _ _ _ _
else
_ _*_s=*_s+_1; _ _ _ _
指向字符串的指针变量
09微机单招
•字符串的两种表示形式:
1、字符数组的方式实现: char ch[ ]=“this is a book!” ;
使用数组的下标可以逐个访问字符串中 的字符,还可以用%s格式整体输入输出 例如:
for(i=0;ch[i]!=‘\0’;i++) printf(“%c”,ch[i]);