字符串指针(char*)和字符数组(char [])区别

原文:http://www.blogbus.com/kavine-logs/29243638.html

今天在编写几个小函数的时候,半天调不通,长久不使用C++知识都快忘光了,赶紧拣些起来应付即将到来的应聘。

void main()
{
    char* pStr1 = "Hello!";
    char pStr2[] = "Hello!";
    change(pStr1);
    change(pStr2);
}
void change(char* pInstr)
{
    pInstr[0]=‘O‘;
}

两种change编译都可以通过,但发现第二个change是可以正确地修改第一个字母为‘O‘,而第一个会操作失败导致程序死掉。

基础知识太差,木的办法,查了查资料,两种定义字符串的方法是有区别的。

字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。

第一种方法定义的字符串中的单个字符只能读,不能修改,如cout<<pStr1[0]<<endl; 但不能做pStr1[0]=‘O‘;的操作。因为它被认为是字符串常量,常量是无法修改的。
而第二种方面定义的字符串是没有这个限制的。

时间: 2025-01-31 15:08:41

字符串指针(char*)和字符数组(char [])区别的相关文章

字符串指针变量与字符数组的区别

使用字符串指针变量与字符数组的区别 (1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符.而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址.(2)初始化赋值含义 字符数组与字符指针变量的初始化赋值形式相同,但其含义不同.例如: char str[ ] ="I am a student ! " ,s[200]; char *pc="You

使用字符串指针变量与字符数组的区别

用字符数组和字符指针变量都可以实现字符串的存储和运算,但是两者是有区别的.在使用时,应注意以下几个问题: 1)   字符串指正变量本身是一个变量,用于存放字符串的首地址.而字符串本身是存放在该首地址的一块连续的内存空间中并以“\0”作为字符串的结束.字符数组是由若干个数组元素组成的,它可用来存放整个字符串. 2)   赋值方式.对字符数组只能对各个元素赋值,不能用以下方式对字符数组赋值. 对字符指针变量,可以采用下面方法赋值. 3)   字符数组由若干个元素组成,每个元素中放一个字符,而字符指针

C 字符串指针与字符数组的区别

用字符数组和字符指针变量都可实现字符串的存储和运算.但是两者是有区别的.在使用时应注意以下几个问题: 1. [字符串指针变量]本身是一个变量,用于存放字符串的首地址. 而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以'\0'作为串的结束. [字符数组]是由于若干个数组元素组成的,它可用来存放整个字符串. 2. 对字符串指针方式  char *ps="C Language"; 可以写为: char *ps;  ps="C Language"; 而对数组方式

C与C++中的字符数组char*和字符串string的相互转化

1. 将字符数组char[]转化为字符串string char ch [] = "ABCDEFG"; string str(ch);//也可string str = ch; //或者 char ch [] = "ABCDEFG"; string str; str = ch;//在原有基础上添加可以用str += ch; 2. 将字符串string转化为字符数组char[] char buf[10]; string str("ABCDEFG");

C类型字符串和字符数组的区别

1.字符串和字符数组的区别,字符数组和普通数组一样,里面的每个元素是一个个的字符,字符串是存在字符数组中的,字符串的结尾处补上了“\0”截止符. 定义过字符串后,得到的是字符数组的首元素的指针,在结尾处加入截止符,可以方便的访问字符串中的任何一个元素.C类型的字符串是存在字符数组中的,在字符串的结尾处补上"\0",这个结尾符是用来标志字符串结尾的,它的作用是const * p; //p是一个常量指针 2.数组名和指针的区别 int a [20]; int *p =a; (1)数组名的内

[转]char * 和字符数组

[转]char * 和字符数组 原文地址:http://www.cnblogs.com/jeakon/archive/2012/05/27/2816809.html 代码中的int * i就是我们关注的焦点.它是一个指向int指针.也就是说:i指向一个内存地址,从这个地址开始存储了一个数据.int * i中的int标明应该使用int类型(长度为sizeof(int)个字节)来从这个地址取数据,也就是说要一次取sizeof(int)个byte的数据来拼成最后的结果.最后一个例子也证明了这一点:如果

String.getBytes()和String.tocharArray(),字节数组和字符数组的区别

String.getBytes()是将字符串转化为一个字节数组.而String.toCharArray()是将一个字符串转化为一个字符数组. [例如] byte bys[] ="国庆60周年".getBytes(); char chs[]="国庆60周年".toCharArray(); [那么字节数组和字符数组有什么区别呢?] 字节输入流和输出流的read和write方法使用字节数组读写数据,即以字节为基本单文处理数据.因此,字节流不能很好地操作Unicode字符,

输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。

#include <stdio.h>#include <string.h> /*输入5个学生的名字(英文),使用冒泡排序按从大到小排序.提示:涉及到字符串数组,一个字符串是一个一维字符数组:一个字符串数组就是一个二维字符数组.*/ void main(){ char stuNames[5][100]; char tmp[100]; int i = 0,j = 0; for(i = 0; i < 5; i++) { printf("请输入第%d个学生的名字:"

Delphi字符串、PChar与字符数组之间的转换

来自:http://my.oschina.net/kavensu/blog/193719 ----------------------------------------------------------------- var s: string; p: pchar; a: array[1..20] of char; 1.字符串 ---> PChar p := PChar(s); 2.PChar ---> 字符串 s := p; 3.PChar ---> 字符数组 StrCopy(@a