C/C++ 字符串与指针
来源:互联网 发布:网络信息化建设 编辑:程序博客网 时间:2024/06/05 21:51
1.字符串与字符串指针
字符串是存放在字符数组中的,通常将字符串作为一个整体来使用,用指针来处理字符串更加方便。
当用指向字符串的指针来处理字符串时,并不关心存放字符串的数组大小,而只关心是否已处理到字符串的结束符。
用指针实现字符串拷贝
# include <iostream.h> # include <string.h> void main(void) { char *p1 = "I am a student" ; char s1[30],s2[30]; strcpy(s1,p1); //用命令拷贝字符串 char *p2 = s2; //将数组s2首地址赋p2 for (;*p2++=*p1++;); //用指针拷贝字符串 cout << "s1=" << s1 << endl; cout << "s2=" << s2 << endl; }
执行后输出:
s1= I am a student
s2= I am a student
说明:
(1)编译系统执行定义语句char *p1=”I am a student” 时,首先为字符串”I am a student “分配内存空间,然后将该内存空间首地址赋给指针变量p1。
(2)用指针变量拷贝字符串过程是,先将指针变量p2指向字符串数组s2的首地址,然后通过赋值语句*p2=*p1将字符由字符串s1中拷贝到s2中,再移动p1、p2到下一个字符单元,依次循环直到字符串结束符’\0’为止。
全部拷贝过程用一个for语句完成。
在for(;*p2++=*p1++;)语句中,表达式:*p2++=*p1++ 等价于下列三条语句:
*p1=*p2; // s2[i]=s1[i],将指针p1所指s1[i]赋给指针p1所指s2[i]。
p1++; //指针p1加1指向s1的下一个元素
p2++; //指针p2加1指向s2的下一个元素
上述语句不断循环,直到p1指向结束字符’\0’=0时,for 语句因条件为假而结束。从而完成字符串s1拷贝到字符数组s2的任务。
(3)指针变量p1可以作为拷贝函数strcpy(s1,p1)的参数。
2.字符型指针变量与字符数组的区别
(1)分配内存
设有定义字符型指针变量与字符数组的语句如下:
char *pc ,str[100];
则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符。而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址。
(2)初始化赋值含义
字符数组与字符指针变量的初始化赋值形式相同,但其含义不同。
例如:
char str[ ] =”I am a student ! ” ,s[200];
char *pc=”You are a student ! ” ;
对于字符数组,是将字符串放到为数组分配的存储空间去,而对于字符型指针变量,是先将字符串存放到内存,然后将存放字符串的内存起始地址送到指针变量pc中。
(3)赋值方式
字符数组只能对其元素逐个赋值,而不能将字符串赋给字符数组名。
对于字符指针变量,字符串地址可直接赋给字符指针变量。
例如:
str=”I love China! “; //字符数组名str不能直接赋值,该语句是错误的。
pc=”I love China! “; //指针变量pc可以直接赋字符串地址,语句正确。
(4)输入方式
可以将字符串直接输入字符数组,而不能将字符串直接输入指针变量。但可将指针变量所指字符串直接输出。
例如:
cin >> str //正确
cin >> pc //错误
cout << pc //正确
(5)值的改变
在程序执行期间,字符数组名表示的起始地址是不能改变的,而指针变量的值是可以改变的。
例如:
str=str+5; //错误
pc=str+5; //正确
- C指针与字符串
- C语言:字符串与指针
- c语言字符串与指针
- C/C++ 字符串与指针
- C语言指针-----指针与字符串
- C字符串数组与字符串指针
- c语言:字符串与字符串指针变量
- C/C++学习笔记:指针与字符串
- C语言中的字符串与指针
- 【Linux C】第四章 指针与字符串
- c学习之指针与字符串
- C/C++中字符串与指针 效率
- C语言程序设计进阶-Chap02-指针与字符串
- C语言之字符串与指针
- C语言入门教程18-指针与字符串
- C语言中的指针与字符串
- C 字符串指针与字符数组
- C语言字符串、数组与指针结合
- Deep Learning---caffe模型参数量(weights)计算
- 小光棍数
- nginx 进程数设置
- 第一篇CSDN博客
- 【SSLGZ 2687】2017年8月14日提高组T1 跳跃
- C/C++ 字符串与指针
- 构造方法的重载
- 《C++ Primer》第五版课后习题解答_第一章(1)(01-11)
- Mysql通过中文查询数据查不出结果问题解决方案
- app-debug.apk does not exist on disk.
- MySQL索引的使用
- 【个人笔记】SIPp学习-注册,呼叫与超时
- 常用函数的封装
- LightOJ 1145 Dice (I) dp