字符串数组和字符串指针的区别联系

xiaoxiao2021-02-27  194

一、区别


1、初始化

char x[10]="abc"; char* q="abc";

在VS2013编译器下,字符串数组和指针均可以按照如上方式进行初始化赋值,但对内存的方式不尽相同,参照下面的例子进行记忆

int main() { char x[10] = "abc"; char y[10] = "abc"; char* q="abc"; char*p = "abc"; printf("x为%s,地址为%p\n", x,x); printf("y为%s,地址为%p\n", y, y); printf("q为%s,地址为%p\n", q, q); printf("p为%s,地址为%p\n", p, p); }

结果如图: 这说明: 字符串数组:有自己专属的内存空间, 字符串指针:指向程序运行时,在内存中创建的“abc”长字符串的首地址,即公用常字符串的地址

对于以下代码

int main() { char name[100]; char *k; name="jlkjsj" //不能通过编译 k = "aaaaaa"; //no problem cout << k << endl; system("pause"); }

说明: 字符串数组:一经初始化后不能再直接赋值,除非用strcpy函数进行赋值或用循环赋值 字符串指针:允许声明后的赋值

2、cin输入

字符串指针不能用cin输入

char *p; cin>>p;

会报错,而字符串数组不会。

3、元素的更改

对于初始化后的字符串数组和字符串指针,我希望更改第二个元素

int main() { char name[100]="abc"; char *k="abc"; k[1] = 'k'; //编译通过,但是程序会报错 name[1] = 'k'; //更改后k="akc" cout << name << endl; cout << k << endl; system("pause"); }

上面的例子说明: 字符串指针:k为指向一块常字符串”abc”,所以不可更改其值 字符串数组 : 自己独立的内存,可以更改 所以:

int main() { char name[100]="abc"; char *k; k = name; name[1] = 'k'; cout << name << endl; cout << k << endl; system("pause"); }

k和name都为”akc”

二、联系


对于以下代码:

int main() { char x[10] = "abc"; char*p = "abc"; cout << x << " " << *x << " " << &x << endl; cout << p << " " << *p << " " << &p << endl; }

用流输出时候x和p均为字符串内容,*x和*p都是字符串首地址内容,&x和&p都是首字母地址

转载请注明原文地址: https://www.6miu.com/read-9527.html

最新回复(0)