C语言-----指针(补充)

指针访问一维数组 

*(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 * 

指针操作二维数组与前面所学知识类似,这里不做赘述;主要是多加练习,多做题,多写代码,理论和实践不一样,要沉下心来去练,加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值