为什么指针要有类型?{\red{为什么指针要有类型?}}为什么指针要有类型?
因为指针有自增自减运算,只有指针有类型时,指针加1就是向后移动一个类型对象的空间。
内存管理{\red{内存管理}}内存管理
全局静态区:{\green{全局静态区:}}全局静态区: 全局变量,静态变量
常量数据段:{\green{常量数据段:}}常量数据段: 常量
栈:{\green{栈:}}栈: 编译器使用的临时变量
堆:{\green{堆:}}堆: 程序员管理的内存
int main(){
// 栈
char a1[] = "abc";
char a2[] = "abc";
const char b1[] = "abc";
const char b2[] = "abc";
// 常量
char *c1 = "abc";
char *c2 = "abc";
const char *d1 = "abc";
const char *d2 = "abc";
// 地址
cout<<(a1==a2)<<endl;
cout<<(b1==b2)<<endl;
cout<<(c1==c2)<<endl;
cout<<(d1==d2)<<endl;
cout<<(c1==d1)<<endl;
return 0;
}
输出:{\orange{输出:}}输出: 0 0 1 1 1
栈变量地址都是不同的,常量地址会根据内容优化{\green{栈变量地址都是不同的,常量地址会根据内容优化}}栈变量地址都是不同的,常量地址会根据内容优化
关于通过指针修改常量:{\red{关于通过指针修改常量:}}关于通过指针修改常量:
char *p = "abc";
p[0] = 'b';
编译不会错误,运行错误{\orange{编译不会错误,运行错误}}编译不会错误,运行错误
编译只会检查类型,语法。
运行错误是因为,当指针试图修改常量区时则抛出错误。
关于this指针{\red{关于this指针}}关于this指针
静态成员函数无this指针
友元函数无this指针
示例:p[0]==∗(p+0){\red{示例:p[0] == *(p+0) }}示例:p[0]==∗(p+0)
char *str[] = {"Welcome","to","Fortemedia","Nanjing"};
char **p = str + 1;
str[0] = (*p++) + 2;
str[1] = *(p+1);
str[2] = p[1] + 3;
str[3] = p[0] + (str[2] - str[1]);
printf("%s\n",str[0]);
printf("%s\n",str[1]);
printf("%s\n",str[2]);
printf("%s\n",str[3]);
输出:{\orange{输出:}}输出:
“”
“Nanjing”
“jing”
“g”
分析:{\green{分析:}}分析:
最后:{\orange{最后:}}最后: