指针访问一维数组
*(p+i) <=> a[i] //等价 数组下标访问 本质上就是指针运算
指针的运算:
p+N // 指针+数字
//含义: 表示 指向了 第N个元素的位置
//数值上看,sizeof(基类型)*N
1. 迭代的写法
2. 快速排序
a.确定一个基准值 (选择的数组首元素)
b.从右向左 找比基准值 小的值
c.从左往右 找比基准值 大的值
d.交换找到的两个值
e.重复 b ~ d ,直到 begin 与 end相遇 ,
将相遇位置的值 与 基准位置上的值交换
f.针对 比基准值小的一部分 继续快速排序
比基准值大的一部分 继续快速排序
指针操作 一维 字符数组
--->怎么能保存s所代表的地址值
//s数组名 --- 数组首元素的地址 &s[0]
--->地址的类型
char *
char *p = s; //指针变量p 指向了 s (数组)
char s[] = "hello"; //s的空间开在 栈上
char *s1 = "hello"; //s1的空间开在栈上,但是s1指向的"字符串常量"
//存放"字符串常量区"
*s1 = *s1 - 32; //不能做 ? 原因是 s1 指向的数据是在 字符串常量区
//常量区的数据不能修改
说一下 const
const int a = 10; //a成了只读变量
const char * s1 = "hello"; //表示 将 *s1 限定为只读
//如果,不希望修改 *s1 的数据
//一般 建议加上const
char * const s1 = "hello"; //const 离谁近,就是限定谁的
char const *s1 = "hello"; //此时 还是 *s1 不能被修改
char const * const s1 = "hello"; // *s1 和 s1 本身都不能被修改
例如:
int Puts(char *s)
{
*s = 'a'; //编译时,不报错
}
int Puts(const char *s)
{
*s = 'a'; //编译时,就会报错
}
const char *s // *s 这种方式修改不了数据
总结:
1.const 离谁近,就限定谁
2.const 修饰的变量,为只读变量 //变量还是变量 只是成了只读的
形参设计:
什么时候需要加const
1.如果函数内部本身不需要通过*s 修改外面的数据
此时,建议 统统加上const
好处:
1.可以将 错误提前 到 编译时 发现
2.提高了参数的适用性
可以接收数组名
也可以接收 字符串常量 //const char *
指针操作二维数组与前面所学知识类似,这里不做赘述;主要是多加练习,多做题,多写代码,理论和实践不一样,要沉下心来去练,加油!!!