一、字符指针概念
字符指针是存放字符地址的指针
二、字符指针的两种用法
指向字符或指向字符串
指向字符:
char ch = 'w'; char* p = &ch; printf("%c\n", *p);//w
指向字符串:
char* p = "abcdef"; printf("%s\n", p);//abcdef printf("%c\n", *p);//a
“abcdef”是字符串,也是一个表达式,表达式值为首字符地址。
因此char* p = "abcdef" 其实是将字符‘a’的地址赋值给指针变量
既然字符串表达式的值为首字符地址,和数组名类似,那么也可以将字符串看做一个数组,数组中存放的是 { 'a','b','c','d','e','f' ,'\0' }。
也可以把字符串当做数组名使用:
int main() { printf("%c\n", "abcdef"[3]);//d printf("%c\n", "abcdef"[5]);//f return 0; }
三、常量字符串与字符串的区别
下列程序运行结果是
str1 != str2
str3 = str4
因为str1和str2是两个独立的字符数组,数组中存放的是 "hello bit" ,str1和str2分别是两个数组首元素的地址,所以str1!=str2
而str3与str4是两个字符型指针变量,存放的是常量字符串“abcdef”的值,即首字符‘h’的地址,所以str3 = str4
int main() { char str1[] = "hello bit"; char str2[] = "hello bit"; char* str3 = "abcdef"; char* str4 = "abcdef"; if (str1 == str2) { printf("str1 = str2\n"); } else { printf("str1 != str2\n"); } if (str3 == str4) { printf("str3 = str4\n"); } else { printf("str3 != str4\n"); } return 0; }