铁律2.间接赋值(*p)是指针存在的最大意义
间接赋值的工程意义:
1.函数调用时形参传给实参,用实参取地址传给形参,在被调用函数里面用*p来修改实参把运算结果传出来
2.指针作为函数参数的精髓是C语言特有的现象,是C语言的精华
3.主函数与被调函数之间通过内存交换运算结果
间接赋值的三个条件:
1.定义了两个变量,或者为实参和形参的形式
2.建立关联
3.通过*p去间接修改值
间接赋值推论:
在函数调用的时候,用n级指针形参去修改n-1级指针(实参)的值
铁律3.理解指针必须和内存四区概念相结合
1.主调函数和被调函数
a)主调函数可把堆区、栈区、全局数据内存地址传给被调函数
b)被调函数只能返回堆区、全局数据(临时内存调用完后析构)
2.内存分配方式
指针做函数参数,是有输入和输出特性的
铁律4.应用指针必须和函数调用相结合
指针做函数参数
一级指针的典型用法:数组、字符串
1.C语言的字符串以0结尾
2.在C语言中没有字符串类型,通过字符数组来模拟
3.字符串的内存分配在 堆上、栈上、全局区
普通指针和内存首地址的区别:
数组名为指针
字符串函数copy推演要点:
*to++=*from++
//++的优先级比*高。先执行*to=*from,再执行to++,from++
代码改进,无需手动在末尾赋值'\0':
项目开发中的字符串模型:
1.strstr-while/dowhile模型
do-while模型
while模型
2.两头堵模型
两头堵模型
3.字符串反转模型
a)指针方法:
字符串反转-指针方法
b)递归方式(逆序结果存入全局变量和递归指针做函数参数)
递归指针做函数参数
const专题(c与c++不一样)
1. const int a 与 int const a等价
2.const char *c 指针变量所指向的内存空间不能修改
3.char * const c
指针变量不能被修改,但是其指向的内存空间可以被修改
4.const char * const c 都不能修改
指针的输入输出模型
1.指针做输入,主调用函数分配内存
2.指针做输出,被调用函数分配内存
二级指针三种内存模型
1)二级指针做输入
a)第一种内存模型
char
*myArray[]={"aaa","ccc","bbb","111"};
排序
b)第二种内存模型
char
myArray[10][30]={"aaa","ccc","bbb","111"};
未封装为函数
myArray+1 与第一种内存模型不同,指针步长不一样:
多维数组
c)第三种内存模型
手工分配内存
二级指针三种内存模型示意图:
示意图