指针引用字符串问题(详解)

简介: 通过指针引用字符串可以更加方便灵活的使用字符串。 字符串的引用方式有两种,下面简单介绍一下这两种方法。1.用字符数组来存放一个字符串。1.1可以通过数组名和下标来引用字符串中的一个字符。1.2还可以通过数组名和格式声明符%s输出整个字符串。

通过指针引用字符串可以更加方便灵活的使用字符串。


字符串的引用方式有两种,下面简单介绍一下这两种方法。


1.用字符数组来存放一个字符串。


1.1


可以通过数组名和下标来引用字符串中的一个字符。


1.2


还可以通过数组名和格式声明符%s输出整个字符串。


具体实现代码如下:


#include <stdio.h>

int main()

{

char ch[] = "xuejiejie";

printf("%s\n", ch);    //输出整个数组

printf("%c\n", ch[1]); //输出第2个字符

return 0;

}

结果:


xuejiejie

u

D:\VS\Project4\x64\Debug\Project4.exe (进程 17608)已退出,代码为 0。

按任意键关闭此窗口. . .

2.用字符指针变量引用字符串常量。


先来举个例子:


#include <stdio.h>

int main()

{

const char* string = "xuejiejie";

printf("%s\n",string);

return 0;

}

结果:


xuejiejie

D:\VS\Project4\x64\Debug\Project4.exe (进程 17916)已退出,代码为 0。

按任意键关闭此窗口. . .

分析:


在c语言中对字符串常量是按照字符数组来处理,所以首先在内存中开辟一个连续字符数组来存放该字符串常量。


但是通过上面的代码我们可以发现字符串是没有数组名的,所以只能通过指针变量来引用。


其实在对指针进行赋值时,只是把字符串中的第一个字符的地址(首元素地址)赋值给指针变量。


对上面string而言就是把“x”的地址赋值给string。(注意不是把整个xuejiejie赋值给string)


错误示范:


const char* string = "xuejiejie";

*string = "xuejiejie";

注意:当对一个数值型的数组时只用数组名是不能输出整个数组的,只能一个一个输出。


对于字符串的存取,可以采用下标法,指针法和指针变量法。


如下所示:


#include <stdio.h>

#include <string.h>

int main()

{

char a[] = "xuejiejie";

  //下标法

for (int i = 0; i < strlen(a); i++)

{

 printf("%c", a[i]);

}

printf("\n");

  //指针变量

char* ch;

ch = a;

printf("%s\n", ch);

for (; *ch != '\0'; ch++)

{

 printf("%c", *ch);

}

return 0;

}


   结果:


xuejiejie

xuejiejie

xuejiejie

D:\VS\Project4\x64\Debug\Project4.exe (进程 8860)已退出,代码为 0。

按任意键关闭此窗口. . .

字符指针作为函数参数时


函数的形参和实参都可以分别用字符数组名或字符指针变量来表示。


具体情况如下表所示:


实参 形参

字符数组名 字符数组名

字符数组名 字符指针变量

字符指针变量 字符指针变量

字符指针变量 字符数组名

比较字符指针变量和字符数组


1.


字符数组是由许多元素组成的,里面只能一个一个来存放一个字符,存放的是‘字符’,而字符指针只是存放字符串中第一个字符的地址,而不是整个字符,


2.


可以对字符指针变量进行赋值,而不能对数组名进行赋值。(数组名代表地址,是常量,不能赋值)


3.


初始化含义不同。数组可以在定义时随便对其赋值,但不能用赋值语句对字符数组中的全部元素整体赋值。而指针数组可以后再进行赋值语句。


4.


开辟的存储空间不同。字符数组将会根据字符串长度或者人为定义的长度来分配储存单元。而字符指针变量,只会分配一个储存单元,用来存放首元素地址。


5.


指针变量的值后期可以自行设定改变,而字符数组的数组名代表一个固定的值(首元素地址)不能改变。


6.


字符数组中各元素的值可以改变,而字符指针变量指向的字符串常量中的内容是不能改变的。


目录
相关文章
|
5月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
74 1
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
4月前
|
存储 安全 C++
浅析C++的指针与引用
虽然指针和引用在C++中都用于间接数据访问,但它们各自拥有独特的特性和应用场景。选择使用指针还是引用,主要取决于程序的具体需求,如是否需要动态内存管理,是否希望变量可以重新指向其他对象等。理解这二者的区别,将有助于开发高效、安全的C++程序。
32 3
|
5月前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
66 5
|
5月前
|
存储 安全 编译器
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字
42 2
|
5月前
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
|
6月前
|
C语言
在引用数组元素时指针的运算
在引用数组元素时指针的运算
50 0
|
6月前
|
C语言
通过指针引用数组元素
通过指针引用数组元素
42 0
|
6月前
|
C语言
通过指针引用多维数组
通过指针引用多维数组
23 0