c/c++基础夯实

-- c++中“箭头(->)”和“点号(.)”操作符的区别
class A  {  
  public  
  play();  
}  
如果定义如下:A *p则使用:p->play(); 左边是结构指针。A p 则使用:p.paly(); 左边是结构变量。
总结:箭头(->):左边必须为指针;点号(.):左边必须为实体。

-- 函数重载和多个构造函数,以及析构函数
函数重载并不属于类的特性,是众多高级语言都有的一种函数特性

c语言中变量的引用传递和指针- https://blog.csdn.net/matrix_google/article/details/76595439
-- C语言中引用及指针;指针的引用,解引用与脱去解引用
(引用型变量存储的是变量的地址,指针存储的也是变量的地址)
1.引用:引用是一个变量的另一个名字,又称别名。定义方式: 
int a=10; 
int &b=a;在这里,意思就是给a变量起了一个新名字b,因此b不可再次被重新定义。 
引用必须初始化,无空引用,并且引用不分等级。 
2.引用与指针的异同点: 
 
 相同点:在引用中 int &b=a;这一句代码可被编译器看做int * const b=&a;//加上const的作用是表明指针b的自身的值(a的地址)不能改变,而指向的值(a的值)可以改变。也就是说引用相当于指针,引用与指针在编译时的方法一样,指向的都是变量的内存地址。 

  不同点:
 1.在定义方式中引用储存的是值,而指针是一个变量的拷贝,存储的是地址。 

 2.引用只能对已经存在的变量或对象实现引用,而指针则不需要,可以定义为空。 

 3.在函数的传参中,如果传递的是一个引用,意味着这个变量或对象已经存在了;如果传递的是一个指针,则不能判断这个指针是不是有效的,是不是空的,因此在函数体 中大多数都得进行指针是否为空的判断。但是虽然引用较为安全,但是利用指针来传参效率较快。 
 
4.引用是直接访问变量,不用分配自己的内存空间,而指针是间接访问,需要定义,需要有自己的内存空间。 
 这2个方法是等效的:void swap(int &a,int &b)
{
   int temp=a;
   a=b;
   b=temp;
}
void swap(int *const a,int *const b)
{
   int tmp=*a;
   *a=*b;
   *b=temp;
}

  使用引用型变量,子函数中所有的操作会直接修改主函数中的实参。正常情况下,使用变量的引用总是没有问题的,引用是地址的拷贝。
编程的本质不就是改变量么?通过引用型变量和指针型变量可以让子函数直接改主函数中的变量,而不再需要为形参开辟内存。用了引用变量后,就不再为形参开辟内存,所有操作都是直接修改实参变量。指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
  编程的本质就是修改变量。调试程序的本质就是跟踪变量。

函数指针就是指向函数的存储空间地址的指针,可以对函数指针进行赋值并且通过函数指针来调用函数,它的本质是一个指针。
而指针函数只是说明它是一个返回值为指针的函数,其本质是一个函数。

- 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的:
  指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。(这里是在说实参指针本身的地址值不会变)
  而在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。

c/c++结构体与结构体指针- https://blog.csdn.net/hndxzcm/article/details/76679095
-- c语言结构体指针,结构体指针的定义和引用
结构体本质是一种数据类型,和C语言的内置内型(char,int,long …)类似,我们可以用它来定义变量。
 结构体指针,就是指向结构体的指针。
那么在C语言中 . 号是成员访问运算符,当我们需要访问结构的成员的时候,就会使用到它;
而当我们需要使用结构体指针来访问结构成员的时候,就得使用->运算符了。

猜你喜欢

转载自blog.csdn.net/ShareUs/article/details/82828841