C语言字符串指针与字符数组的区别
用字符数组和字符串指针都可实现字符串的存储和运算,但是两者是有区别的。
1) 字符数组是一个数组,每个元素的值都可以改变。而字符串指针指向的是一个常量字符串,它被存放在程序的静态数据区,一旦定义就不能改变。这是最重要的区别。
关于静态存储区的概念请查看:C语言内存模型(内存组织方式)
下面的代码在运行期间将会出错:
2) 对字符串指针方式:
1) 字符数组是一个数组,每个元素的值都可以改变。而字符串指针指向的是一个常量字符串,它被存放在程序的静态数据区,一旦定义就不能改变。这是最重要的区别。
关于静态存储区的概念请查看:C语言内存模型(内存组织方式)
下面的代码在运行期间将会出错:
#include <stdio.h> int main(){ char str1[] = "C Language"; char *str2 = "C Language"; str1[1] = '-'; *(str2+1) = '-'; //错!不能改变字符串常量的值 printf("str1 = %s\n", str1); return 0; }
2) 对字符串指针方式:
char *ps="C Language";可以写为:
char *ps; ps="C Language";而对数组方式:
char st[]={"C Language"};不能写为:
char st[20]; st={"C Language"};只能对字符数组的各元素逐个赋值。