栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++-基础部分-指针-小总结

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++-基础部分-指针-小总结

清华大学出版社《c++程序设计》(第三版)中简单总结的一些知识点

  • int *p 指向int类型的指针;指针变量存放着另一变量的地址,它本身也是一个变量,也有地址;*xptr,直接就代表了它所指向的x变量,不必纠结;
  • 引用也是一种类型,int x;int &y=x;y就成了x的一个别名,对y操作就是对x的操作,和指针不同的是,一旦被初始化,就不能改变引用关系了
  • 指针算数运算,p++,p+n位移;指针关系运算:前后p1
int a[10],*aptr;
aptr = a;	
aptr = &a[0];	
a[5] = *(aptr+5) = *(a+5) = apter[5];
  • 指针数组:例如按二维数组来储存字符串,按最长的来定义,造成空间浪费,如果采用指针,则可以存放任意长度的字符串;char *week[7]={“sunday”,“monday”……}
  • 字符指针,将字符串指针指向字符串的首地址;用char类型定义字符串,除了字符数组,就是用字符指针不能直接定义char s=“fdsafd”,定义字符串指针后,对s的操作就是对字符串的操作
char *s="asfdqghv";
char *s;
s="asfdqghv";
//最好加const
  • const限定符 (这里常量指的是不能变的,非常量指的是可以变的,主要看const摆哪)
    • 指向非常量的非常量指针(那都不加const)
    • 指向常量数据的非常量指针
      • int i;const int p;p=&i;)p指向的整数不能通过p来修改,即通过p,但修改p是允许的,他可以指向别的如p=&j,也可以直接修改常整数j=10;
      • const int val=10;const int *p;p=&val;)这时通过p和通过val都不能修改val的值;
    • 指向非常量数据的常量指针
      • (int var;int *const p=&var;) p指向的整数可以通过p来修改,但是p本身的值初始化后不能修改了,永远只能指向var
      • 由于声明了是指向int变量,所以也不能指向const修饰的整形变量如(const int var)
    • 指向常量数据的常量指针
      • (const int val=10;const int *const p=&val;)
    • 用于传递函数参数
      • 函数参数是指针,合理使用const限定符,保证实参安全,又能避免普通传值带来的空间开销,例:void output(const double pd) {}(不能通过p修改参数)
      • const修饰引用参数,例:void output(const double &d){}(d不能被修改)
  • 指针和引用 见,p170例7-9,通过指针和传引用的用法上有区别,要理解其中的意思
    指针:定义函数时void swap(int *x,int *y),调用函数时swap(&x,&y)
    引用:定义函数时void swap(int &x,int &y),调用函数时swap(x,y)
    (我看到过这样一个描述,引用底层是一个自动解引用的const指针)
    但指针过于自由,可以随便指,但传引用依附于固定对象,所以不容易出错,更易读。
  • 动态内存分配(静态内存就是普通变量声明的内存,动态内存通过指针分配所需的内存呢,按需分配,及时释放)
    c上遗留下来的方法malloc、free,如例7;
    new delete 方法
  • 函数指针(int (*fb)(char));(要加括号否则变成对指针函数的声明,int *fb(char),表示返回指向int的指针)p177,例7-12
    • 函数名就想数组名一样,代表指向储存函数空间的首地址 例如:int (*p) (int,int); int a(int,int); p=a,则p就指向了函数p,注意p和a的返回类型和参数类型都是一样的。可以int i=(*p)(1,2),即p的调用代替a的调用;int i=p(1,2) 也能工作
    • 当某个函数的参数是函数指针 void a(int (*b)(int));某个函数int c(int) 正好a的参数类型匹配,则使用时这么用: a( c )就行了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号