1.字符指针
char* p=“abcdef”
此时p指向的是常量字符串,是将字符串首元素的地址存放于该指针中,此时该字符串的内容是不可以通过指针来修改的,故也可以写成这种形式 const char* p=“abcdef”,用const在左边来限定指针,左定值
要想对字符串的内容进行修改,就需要写为另外一种形式
char c[]=“abcdef”;
char p=&c;
此时p指针中存放的也为c这个字符串首元素的地址,但是可以对字符串进行修改
char str1[]="hello bit";
char str2[]="hello bit";
char* str3="hello bit";
char* str4="hello bit";
if(str1==str2) printf("str1 and str2 are same");
else printf("str1 and str2 are not same");
if(str3=str4) printf(’str3 and str3 are same");
else printf("str3 and str4 are not same");
最终的结果是,str1 and str2 are not same
str3 and str4 are not same
原因是:str3和str4指向的是一个同一个常量字符串,c/c++会把常量字符串 存储到单独的一个内存区域,当几个指针,指向同一个字符串时,他们实际指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟不同的内存块,所以str1和str2不同,str3和str4相同
2.指针数组
可以通过类比得到,字符数组-存放字符的数组 char arr[5]
整形数组-存放整形的数组 int arr[5]
指针数组-存放指针的数组 int* arr[5]
3.数组指针
类比,整形指针-指向整形的指针 int a; int* p=&a;
字符指针-指向字符的指针 char a;char* p=&a;
数组指针-指向数组的指针 int(p)[10];
p先与结合,说明p是一个指针变量,然后指向的是一个大小为10的整型的数组