数组和指针具有相似性,以字符数组形式表示的字符串,也可以借由指针来获得更灵活的多样的处理。
数组和指针的相同点
#include <stdio.h>
int main()
{
int i;
char str[]="abc";//用数组实现的字符串
char stc[]="a,b,c";
/*字符串数组中,“”里面所有的元素都会占用一空间,
包括‘,’ 所以stc[]的表达方式是不对的 */
char *ptr="123";//用指针实现的字符串
for(i=0;str[i];i++)
putchar(str[i]);
putchar('\n');
for(i=0;ptr[i];i++)
putchar(ptr[i]);
putchar('\n');
printf("str=%s\n",str);
printf("ptr=%s\n",ptr);
//%s输出一串字符串,直到某一个字节内存的元素为'\0' 。
return 0;
}
输出结果:
不带下标运算符[ ]单独出现的数组名,就是指向该数组第一个元素的指针,所以str就是指向第一个字符’a’的指针。原本就是指针的ptr则指向字符串"123"的第一个字符’1’。
传入printf函数的str和ptr,一个是数组,一个是指针。这两者有着本质的区别,但他们都指向字符串的第一个字符,这一点是相同的。
数组和指针的不同点
#include <stdio.h>
int main()
{
int i;
char str[]="abc";//用数组实现的字符串
char stc[]="a,b,c";
/*字符串数组中,“”里面所有的元素都会占用一空间,
包括‘,’ 所以stc[]的表达方式是不对的 */
char *ptr="123";//用指针实现的字符串
str="def";//错误,不能这样赋值
ptr="456";//正确,指向另一个字符串字面量
printf("str=%s\n",str);
printf("ptr=%s\n",ptr);
//%s输出一串字符串,直到某一个字节内存的元素为'\0' 。
return 0;
}
对于用数组实现的str,不能在赋值为其他字符串,就像str是一个家族的族长,不能选择外族人来继承家产。
不过对于指针是可以重新赋值的,ptr原来喜欢"123";后来移情别恋喜欢"456";
这不是复制整个字符串的内容,只是重新指向了另一个字符串(的第一个字符)