2 tach1bana Tach1banA 于 2015.07.15 12:05 提问

关于char * ch指针和char ch [10]数组的区别

char ch1[10];
char * ch2;
如果现在要将一个c风格字符串赋给这两个对象,
void copy1(char ch1[10],char * temp)
void copy2(char * ch2,char * temp)
为什么后者可以直接ch2=temp而前者只能用strcpy?

9个回答

oyljerry
oyljerry   Ds   Rxr 2015.07.15 12:10
已采纳

ch2是指针,所以=temp,其实做的是指针地址赋值而已,这样ch2也指向temp那一块内存

而ch1是一个数组,你要给它赋值,就需要把内容复制到数组中,所以需要strcpy

oyljerry
oyljerry 回复Tach1banA: 这个是初始化,初始化会做赋值,但是你后面的操作就不是初始化了
2 年多之前 回复
Tach1banA
Tach1banA 但是c++不是把字符串常量解释为地址吗。。初始化数组char ch[10]="csdn"又是怎么回事。。
2 年多之前 回复
lx624909677
lx624909677   Ds   Rxr 2015.07.15 12:11

ch2是指针,放的是地址,用ch2=temp来赋值,是把temp的地址赋给ch2,并且ch2自己是没有空间来存放数据的,之所以不能ch1=temp这么写,是因为ch1有自己的空间,如果改变他的地址,那么这个地址指向的空间也就变了

wuxudong23
wuxudong23 char[]指针不能被赋值的,会报错
2 年多之前 回复
Tach1banA
Tach1banA 但是c++不是把字符串常量解释为地址吗。。初始化数组char ch[10]="csdn"又是怎么回事。。
2 年多之前 回复
wenwuwenwuwenwu
wenwuwenwuwenwu   2015.07.15 12:12

ch2存储的是地址,也就是指向字符串首地址的一个地址变量来的,因为temp的类型和ch2一样,所以可以直接赋值,char ch1[10],变量存储的是普
通的数值,并不是地址,所以使用strcpy

Tach1banA
Tach1banA 但是c++不是把字符串常量解释为地址吗。。初始化数组char ch[10]="csdn"又是怎么回事。。
2 年多之前 回复
frank_20080215
frank_20080215   2015.07.15 12:22

区别不大。只是char * ch指针很容易修正而去指向其他char类型的变量。且维度不需要考虑。
char ch[10],ch的维度是固定,不太灵活。
两者的指针操作差不多。

gsmqzyz
gsmqzyz   2015.07.21 12:07

你直接ch1=temp估计也行,因为ch2是指针,直接取了字符串的首地址,而你直接用ch1也是取了ch1[]数组的首地址,应该也行

u013485543
u013485543   2015.08.04 16:19

ch2是指针,可以赋值=temp,这样ch2也指向temp那一块内存地址.

而ch1是数组,给它赋值,就需要把内容复制到数组中,所以需要strcpy.

liqinglinde
liqinglinde   2015.08.05 16:02

你没有理解指针的含义,指针只是指向某一地址,数组则表达的含义是存储的数据。

lingzhu111
lingzhu111   2015.08.07 16:44

指针是指向地址, p1 = p2 p2的地址赋给p1
数组 及地址是固定的。 不能更改。只能修改里面的内容。

suiyunonghen
suiyunonghen   2015.07.15 12:11

Ch2是指针,可以直接把指针变量赋值给他。。

Csdn user default icon
上传中...
上传图片
插入图片