指针的概念:
1、指针就是一个变量,用来存放地址,地址唯一标识一块内存空间。
2、指针的大小是固定的字节数,32位平台为4个字节,64位平台为8个字节。
3、指针是有类型的,指针的类型决定了指针的±整数的步长
字符指针(char *)
一般使用:
int main(){
char ch = 'y';
char *sh = &ch; //将 ch 的地址放在 sh 中
*sh = 'y'; // *sh 取 ch 的内容
printf("%c\n", *sh);
system("pause");
return 0;
}
还有一种使用方式:
int main(){
char *str = "Hello Hots3y !";
printf("%s\n", str);
system("pause");
return 0;
}
代码char *str = "Hello Hots3y !";
,本质是把字符串 Hello Hots3y 首字符的地址放到了 str 中。
有以下练习题:
int main(){
char str1[] = "Hello Hots3y!";
char str2[] = "Hello Hots3y!";
char *str3 = "Hello Hots3y!";
char *str4 = "Hello Hots3y!";
if (str1 == str2){
printf("str1 and str2 are same\n");
}
else{
printf("str1 and str2 are not same\n");
}
if (str3 == str4){
printf("str3 and str4 are same\n");
}
else{
printf("str3 and str4 are not same\n");
}
system("pause");
return 0;
}
运行界面:
原因:
str1 和 str2 重新开辟了一段内存空间存放字符串的 Hello Hots3y! 的首地址
str3 和 str4 本质是把一个常量字符串的首字符 H 的地址存放到指针变量中
注意:
这里str3和str4指向的是一个同一个常量字符串。C/C++会把常量字符串存储到单独的一个内存区域,当几个指针。
指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以str1和str2不同,str3和str4相同。