指向字符串的指针变量
- 格式:ppt
- 大小:89.00 KB
- 文档页数:17
为什么字符串可以赋值给字符指针变量?⼀、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虽然也有地址,但是这与指针是不⼀样的,指针的值是地址,⽽数组的值虽然也是地址,但是却是⼀个常量,所以不能给常量赋值。
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个字符的地址称为字符串的首地址。
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语言(判断题专项练习)及答案一、基础知识(每小题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、无论哪种循环语句,都必须给出循环结束条件。
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类型基础知识的选择题: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语言中关于字符串类型的基础知识。
计算机二级C语言字符串的指针以及指向字符串的指针变量计算机二级C语言字符串的指针以及指向字符串的指针变量1.用指针方法实现一个字符串的存储和运算如:char * strp=″china″;此处定义了一个字符指针变量strp,变量中存放的是字符串第一个字符的地址。
C语言对字符串常量是按字符数组处理的,它实际上在内存开辟了一个字符数组用来存放字符串变量,并把字符串首地址赋给字符指针变量strp。
在输出时用printf(″%s\n″,strp);通过字符数组名或字符指针变量可以输出一个字符串。
而对一个数值型数组,是不能企图用数组名输出它的全部元素的。
2.字符指针变量与字符数组虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的`,不应混为一谈,主要有以下几点:(1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中。
(2)对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。
Char str[14];str=″I love China!″;而对字符指针变量,可以采用下面方法赋值:char *a;a=″I love China!″;但注意赋给a的不是字符,而是字符串的首地址。
(3)赋初值时,对以下的变量定义和赋初值:char *a=″I love China!″;等价于:char *a;a=″I love China!″;而对数组初始化时:static char str[14]={″I love China!″};不能等价于char str[14];str[]={″I love China!″};即数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。
(4)在定义一个数组时,在编译时即已分配内存单元,有确定的地址。
而定义一个字符指针变量时,给指针变量分配内存单元,在其中可以放一个地址值,就是说,该指针变量可以指向一个字符型数据,但如果未对它赋予一个地址值,这时该指针变量并未具体指向哪一个字符数据。
10.4符串的指针指向字符串的针指变量10.4.1 字符串的表示形式在C语言中,可以用两种方法访问一个字符串。
1) 用字符数组存放一个字符串,然后输出该字符串。
【例10.24】main(){char string[]=”I love China!”;printf("%s\n",string);}说明:和前面介绍的数组属性一样,string是数组名,它代表字符数组的首地址。
2)用字符串指针指向一个字符串。
【例10.25】main(){char *string=”I love China!”;printf("%s\n",string);}字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。
只能按对指针变量的赋值不同来区别。
对指向字符变量的指针变量应赋予该字符变量的地址。
如: char c,*p=&c;表示p是一个指向字符变量c的指针变量。
而: char *s="C Language";则表示s是一个指向字符串的指针变量。
把字符串的首地址赋予s。
上例中,首先定义string是一个字符指针变量,然后把字符串的首地址赋予string(应写出整个字符串,以便编译系统把该串装入连续的一块内存单元),并把首地址送入string。
程序中的:char *ps="C Language";等效于:char *ps;ps="C Language";【例10.26】输出字符串中n个字符后的所有字符。
main(){char *ps="this is a book";int n=10;ps=ps+n;printf("%s\n",ps);}运行结果为:book在程序中对ps初始化时,即把字符串首地址赋予ps,当ps= ps+10之后,ps指向字符“b”,因此输出为"book"。
c语言字符串指针初始化C语言字符串指针初始化为标题在C语言中,字符串是一种常见的数据类型,用于存储和操作文本数据。
字符串指针则是指向字符串的指针变量,可以用于对字符串进行操作和处理。
本文将以C语言字符串指针初始化为标题为主题,探讨字符串指针的初始化和使用方法。
## 1. 概述在C语言中,字符串指针的初始化可以通过多种方式实现。
常见的方式有直接赋值、使用strcpy函数和通过字符数组的地址进行初始化等。
下面将详细介绍这些初始化方法。
## 2. 直接赋值字符串指针的直接赋值是一种简单且常用的初始化方式。
通过将字符串的首地址赋值给指针变量,即可完成指针的初始化。
具体实现如下:```cchar *str = "Hello, world!";```在上述代码中,字符串常量"Hello, world!"的首地址被赋值给了指针变量str。
这样,str就指向了该字符串。
需要注意的是,使用直接赋值方式时,不能对字符串进行修改,否则会导致程序崩溃。
## 3. 使用strcpy函数另一种常见的字符串指针初始化方式是使用strcpy函数。
该函数用于将一个字符串复制到另一个字符串中。
通过将目标字符串的地址作为参数传递给strcpy函数,即可将字符串的内容复制到指针变量所指向的位置。
具体示例如下:```cchar str[20];strcpy(str, "Hello, world!");```在上述代码中,首先定义了一个大小为20的字符数组str,然后使用strcpy函数将字符串"Hello, world!"复制到了str中。
这样,str 就指向了复制后的字符串。
## 4. 通过字符数组的地址进行初始化除了上述两种常用的初始化方式,还可以通过字符数组的地址来初始化字符串指针。
具体方法是将字符数组的名称直接赋值给指针变量,即可使指针指向字符数组的首地址。
10.4字符串的指针和指向字符串的指针在C语言中,既可以用字符数组表示字符串,也可用字符指针变量来表示;引用时,既可以逐个字符引用,也可以整体引用。
字符串在内存中的起始地址称为字符串的指针,可以定义一个字符指针变量指向一个字符串。
1.定义字符指针变量★char *ps1;ps1="form one";char *ps1="form one";★char str[ ]= "form one", *ps1;★ps1=str;注意:字符指针变量ps1中,仅存储串常量的地址,而串常量的内容(即字符串本身),是存储在由系统自动开辟的内存块中,并在串尾添加一个结束标志’\0’。
2. 引用1)逐个引用main(){ char *string="I am fine.";for(; *string!=’\0’; string++)printf("%c", *string);printf("\n");}2) 整体引用main(){ char *string="I am fine.";printf("%s\n",string);}程序说明:printf("%s\n",string);语句通过指向字符串的指针变量string,整体引用它所指向的字符串的原理:系统首先输出string指向的第一个字符,然后使string自动加1,使之指向下一个字符;重复上述过程,直至遇到字符串结束标志。
注意:其它类型的数组,是不能用数组名来一次性输出它的全部元素的,只能逐个元素输出。
3.字符指针变量与字符数组之比较虽然用字符指针变量和字符数组都能实现字符串的存储和处理,但二者有区别.(1)存储内容不同。
字符指针变量中存储的是字符串的首地址,而字符数组中存储的是字符串本身(数组的每个元素存放一个字符)。