为 什 么 指 针 要 有 类 型 ? {\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{编译不会错误,运行错误}} 编译不会错误,运行错误
编译只会检查类型,语法。
运行错误是因为,当指针试图修改常量区时则抛出错误。
关 于 t h i s 指 针 {\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{最后:}} 最后: