指针定义的字符串(char*str="hello")和字符数组(char str[]={'h','e','l','l','o'})的区别:
字符串数组是用来存放字符串的数组,在内存中占一段连续的单元。所占内存存放的是字符串。定义方法为:char ch[] 可初始化。
字符指针是指向字符的指针,指针变量本身在栈上存储,而数据存储在只读段,只能读取,不能更改。定义方法为:char *p;
只要区别有以下几种:
1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的地址(字符串第一个字符的地址)
2)赋值方式
对于字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值:
char str[10];
str = "hello world!";错!!!
而对于字符指针变量,可采用如下赋值:
char *str
str= "hello world!"; 将字符串中第一个元素的地址赋给指针变量a.
3)初始化
char *str = "hello world!";
等价于
char *str=NULL//预防野指针
str= "hello world!";
而对数组的初始化:
char str[10] = {"hello world!"}; 则不能写成 char str[10]; str = "I love you!";
4)定义一个字符数组,在编译时为它分配内存单元,它有确定的地址。
而定义一个字符指针变量时,时给指针变量分配内存单元,指针指向字符串的首元素。
字符串数组是用来存放字符串的数组,在内存中占一段连续的单元。所占内存存放的是字符串。定义方法为:char ch[] 可初始化。
字符指针是指向字符的指针,指针变量本身在栈上存储,而数据存储在只读段,只能读取,不能更改。定义方法为:char *p;
只要区别有以下几种:
1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的地址(字符串第一个字符的地址)
2)赋值方式
对于字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值:
char str[10];
str = "hello world!";错!!!
而对于字符指针变量,可采用如下赋值:
char *str
str= "hello world!"; 将字符串中第一个元素的地址赋给指针变量a.
3)初始化
char *str = "hello world!";
等价于
char *str=NULL//预防野指针
str= "hello world!";
而对数组的初始化:
char str[10] = {"hello world!"}; 则不能写成 char str[10]; str = "I love you!";
4)定义一个字符数组,在编译时为它分配内存单元,它有确定的地址。
而定义一个字符指针变量时,时给指针变量分配内存单元,指针指向字符串的首元素。