【无标题】

这里写目录标题

      • 指针
        • 例题
        • 定义指针
        • 建立指针
        • 间接引用指针
        • 指针的地址`&iptr`
        • 指针与数组
        • 分配和释放堆内存
        • new 和delete
        • const指针
      • 引用变量
      • 默认形参

指针

例题

【无标题】_第1张图片
【无标题】_第2张图片

定义指针

  • 指针的定义语句,由数据类型后跟星号,再跟随指针名组成
    指向变量的指针
    指向常量的指针
	int* ptr;
	const int* cptr;//常量也具有地址,所以有指向常量的地址
  • 在指针定义中,一个*只能表示一个指针
int *iptr1,iptr2;

表示定义一个iPtr1指针变量和一个iPtr2整型变量。
如果要定义两个指针变量,须

int *iptr1, *iptr2;

建立指针

建立指针包括定义指针给指针赋初值
用&操作符可以获取变量的地址,指针用于存放地址

int *iptr;
int count=18;
*iptr=&count;//将地址赋予存放地址的指针

间接引用指针

*放在可执行语句中的指针之前,为间接引用操作符;*放在指针定义中时,为指针定义符。

int *iptr;
int count=18;
*iptr=&count;//将地址赋予存放地址的指针
cout<<*iptr;//18

间接引用的指针既可用于右值,也可用于左值。

*iptr=28;//指针的间接引用作为左值
cout<<count<<endl;//改变*iPtr就是改变Count。所以,输出结果为28。

指针的地址&iptr

【无标题】_第3张图片
可以强制转换。例如,允许语句“*iPtr=(int)&iCount;”,但要注
意其赋值的意义。该语句表示将变量iCount的地址值作为一个整型数赋
给*iPtr,即iCount变量。

不要将int*iPtr=&iCount;*iPtr=&iCount;混淆。前者是定义语句,*是指针定义符,C++为iPtr指针分配一个指针空间,并用Count的地址值初始化;后者是赋值语句,左右两边类型不匹配。

指针与数组

int array[10];
int *ptr;
ptr=array;//等价于 ptr=&arry[0];

或者

int array[10];
int *ptr;
ptr=&arry[0];

分配和释放堆内存

【无标题】_第4张图片

  • 上例中并没有保证一定可以从堆中获得所需内存。有时,系统能提供的堆空间不够分配,这时系统会返回一个空指针值NULL。这时所有对该指针的访问都是破坏性的,因此调用mall()函数更完善的代码,应该如下
    【无标题】_第5张图片
  • free()参数是先前调用malloc()函数时返回的地址。把其他值
    传给free()很可能会造成灾难性的后果。

new 和delete

new和delete是C++专有的操作符,它们不用头文件声明。new类似于函数malloc(),分配堆内存,但比malloc()更简练。new的操作数为数据类型,它可以带初始化值表或单元数。new返回一个具有操作数的数据类型的指针。
返还delete类似于函数free(),释放堆内存。delete的操作数是new返回的指针,当返还的是new分配的数组时,应该带[]
【无标题】_第6张图片
从此例可以看到,new的返回值无须显式转换类型,直接赋给整数指针array。new的操作数是int[aSize],它只要指明什么类型和要几个元素就可以了,它比函数malloc()更简捷。虽然new和delete在性能上略逊于函数malloc()和free(),但却更安全并具有更丰富的功能。在第14章将进一步展开new和delete的讨论
【无标题】_第7张图片

栈:由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。
堆:由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个delete[]对应。如果程序员没有释放掉,资源将由操作系统在程序结束后自动回收

作者:光之所向
链接:https://www.nowcoder.com/exam/test/71984820/submission?pid=51694677
来源:牛客网

const指针

  • 1、指向常量的指针(常量指针)

【无标题】_第8张图片

  • 2、指针常量
    【无标题】_第9张图片

  • 3、指向常量的指针常量(常量指针常量)
    【无标题】_第10张图片

引用变量

定义引用变量时必须指明其引用的是哪个变量,且不能再指向其他变量

默认形参

函数的默认形参必须在非默认形参右边,即一律靠右

函数传参时,如果不赋值,按默认形参值执行

void add(int x = 1, int y, int z = 3);   //错误
void add(int y, int x = 1, int z = 3);   //正确

你可能感兴趣的:(c++)