《C和指针学习笔记》之指针总结

1. 用于声明变量的表达式和普通表达式在求值时所使用的规则相同;

 

2. 转移表就是一个函数指针表达式;

 

3. int   main(int   argc,   char*   argv[],   char*   env[]) ,如果*argvNULL,那么**argv的第二个间接访问就是非法的,实际上是对空指针进行解引用;

4.  当一个字符串出现在表达式中时,它的值是一个指针常量;

    常量指针就是指向常量的指针,指针所指向的内容是不可修改的;指针常量就是指针的常量(指针是常量),它是不可改变地址的指针,但是可以对它所指向的内容进行修改。

...............................................................................................

(以下内容来自:小祥的BLOGhttp://xfxsworld.cnblogs.com )谢谢!蓝色波浪线中间部分

常量指针,就是指向常量的指针,关键字 const 出现在 * 左边,表示指针所指向的地址的内容是不可修改的,但指针自身可变。

指针常量,指针自身是一个常量,关键字 const 出现在 * 右边,表示指针自身不可变,但其指向的地址的内容是可以被修改的。
例:

    常量指针: const char* ptr = “hello”

    指针常量: char* const ptr = “hello”

 

另外常量指针有两种写法:const既可写在类型前,又可写在类型后。如上面的例子,常量指针:char const * ptr = “hello” 也是正确的。

最后再举个例子,与迭代器经常在一起用。

若希望迭代器所指向的东西不可变,则需要的是 const_iterator。例:

std::vector<int>::const_iterator Iter = vec.begin();

*Iter = 10;//错误,Iter是常量指针

Iter++;//正确,Iter本身可变

 

若希望迭代器本身不可变,指向的内容可变,则可以这样写:

const std::vector<int>::iterator Iter = vec.begin();

*Iter = 10//正确,指针常量

Iter++;     //错误,指针本身不可变

...............................................................................................

 

5. 使用转移表必须验证下标的有效性,访问数组当然不可以越界;

 

6. 没遇到一个指针,都应该问问:这个指针的类型是什么?指针指向的类型是什么?指向了哪里?

 

7. 指针表达式也具有指针所具有的四个要素:指针的类型;指针所指向的类型;指针指向的内存区;指针自身占据的内存;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值