Notas de C ++ Primer Plus (Capítulo 7)

1. El valor de retorno de la función C ++ no puede ser una matriz, pero puede ser un entero, un número de punto flotante, un puntero, una estructura u objeto. Puede devolver una matriz como parte de una estructura u objeto.

2. int arr [];

  arr [i] == * (arr + i); & arr [i] == arr + i;

3. Indique el tipo de matriz y el número de elementos a la función de procesamiento de matriz y páselos con dos parámetros diferentes: void fillArray (int arr [], int size); 

No utilice void fillArray (int arr [size]);

4. const Tamaño = 8;

int sum_arr (int arr [], int n);

vacío principal(){

int cook [Size] = {1,2,3,4,5,6,7,8}; cout << sizeof cook; // La longitud mostrada es 32
int sum = sum_arr (cook, Size);}

int sum_arr (int arr [], int n) {

cout << arr; cout << sizeof arr; // La longitud mostrada es 4, cook y arr apuntan a la misma dirección,

                                         Pero sizeof cook es 32 (longitud de toda la matriz), sizeof arr es 4 (longitud de la variable de puntero)

......

}

5. Al proteger la matriz y convertirla en datos legibles, utilice la declaración const

La función necesita modificar la matriz, la forma original: void f_modify (double arr [], int n);

La función no modifica la matriz, la forma original: void f_nochange (const double arr [], int n);

8. Utilice la función del intervalo de matriz:

const Tamaño = 8;

int sum_arr (const int * comenzar, const int * end);

vacío principal(){ 

int cook [Tamaño] = {1,2,3,4,5,6,7,8};

int sum = sum_arr (cocinar, cocinar + Tamaño); }

int sum_arr (const int * begin, const int * end) {

int total = 0;    const int * pt;  

para (pt = comenzar; pt! = fin; pt ++)

   total = total + * pt;

}

9. General se referirá al pin point a un parámetro constante que se declara como un puntero al objeto no se puede usar para modificar el valor del puntero al que apunta, pero se puede modificar la posición del puntero.

int edad = 39;

const int * pt = & age; // Puntero a un objeto constante, los punteros no se pueden usar para modificar el valor de la edad al que se apunta, y pt se puede hacer que apunte a otras ubicaciones * pt + = 1; (ilegal)

int * const finger = & age; // El puntero en sí es una constante, no puede modificar la posición apuntada por el puntero, pero puede usar el dedo para modificar el valor de age

Arriba del dedo, * pt son constantes, * finger y pt no son constantes.

Está prohibido asignar la dirección de una matriz constante a un puntero no constante, y puede usar cast para romper esta limitación. (P222)

10. Funciones y matrices bidimensionales:

int datos [3] [4] = { {1,2,3,4}, {9,2,1,4}, {2,4,6,3}}; int total = suma (datos, 3);

La forma original de sum: int sum (int (* arr2) [4], int size); //  (* arr2) [4] representa el puntero de una matriz compuesta por 4 ints, el   tamaño representa el número de filas 

            O: int sum (int arr2 [] [4], int size); // Estos dos prototipos arr2 son punteros en lugar de matrices

(Int * arr2 [4] representa una matriz que consta de 4 punteros a int.)

arr2

arr2 + r

* (arr2 + r)

* (arr2 + r) + c

* (* (arr2 + r)) + c == arr2 [r] [c]

12. while (* str) 等价 于 while (* str! = "\ 0") 

#include<iostream>
char * buildstr(char c,int n);  //该函数的返回值是一个指针
int main()
{
  using namespace std;
  char ch; 
  int times;
  cout<<"Enter a character: ";
  cin>>ch;
  cout<<"Enter an integer: ";
  cin>>times;
  char * ps=buildstr(ch, times);
  cout<<ps<<endl;
  delete [] ps;  //释放指针所指内存
  ps=buildstr('+',20);  //释放后可以重新使用指针
  cout<<ps<<"Done"<<ps<<endl;
  delete [] ps;  //释放指针所指内存
  return 0;
}
char * buildstr(char c,int n) //该函数的返回值是一个指针
{
  char * pt=new char[n+1]; //用new分配动态数组
  pt[n]='\0';
  while(n-->0)
      pt[n]=c;
  return pt;
}

 13. Función y estructura: la función devuelve la estructura

#include "stdafx.h"
#include<iostream>
struct travel_time
{
	int hour;
	int min;
};
const int mins_perh = 60;
travel_time sum(travel_time t1, travel_time t2);
void showtime(travel_time t);
using namespace std;
int main()
{
	travel_time day1 = { 5, 24 };
	travel_time day2 = { 6, 48 };
	travel_time trip = sum(day1, day2);
	cout << "Two days total: ";
	showtime(trip);

	travel_time day3= {3, 51};
	cout << "There days total: ";
	showtime(sum(trip, day3));

}
travel_time sum(travel_time t1, travel_time t2) //函数要返回一个travel_time结构,应先声明一个travel_time结构
{
	travel_time total;
	total.hour = t1.hour + t2.hour + (t1.min + t2.min) / mins_perh;
	total.min = (t1.min + t2.min) % mins_perh;
	return total;
}
void showtime(travel_time t)
{
	cout << t.hour << "hours, " << t.min << "minutes.\n";
}

Al pasar la dirección de la estructura, es más conveniente que la función no se defina como el tipo devuelto

#include "stdafx.h"
#include<iostream>
#include<cmath>
using namespace std;
struct rect
{
	double x;
	double y;
};
struct polar
{
	double dis;
	double angle;
};
void rect_polar(const rect * pxy, polar * pda);
void showploar(const polar * pda);
int main()
{
	rect zb;
	polar  da;
	cout << "Enter the x and y value ";
	while (cin >> zb.x >> zb.y) //访问结构数据的成员用句点 .
	{   
		rect_polar(&zb, &da); //参数类型是指针,应对结构变量取地址
		showploar(&da);
		cout << "Next two number(q to quit): ";
	}
	return 0;
}
void rect_polar(const rect * pxy, polar * pda) //无返回值,用另一个参数来存储所需结果
{
	const double rad_to_ang = 57.29577951;
	pda->dis = sqrt(pxy->x*pxy->x + pxy->y*pxy->y); //访问结构指针的成员用->
	pda->angle = atan2(pxy->y, pxy->x)*rad_to_ang;
}
		
void showploar(const polar * pda)
{
	cout <<"distance="<< pda->dis << ", angle=" << pda->angle;
}

14. Declare la matriz de cadenas: lista de cadenas [5];

 写入 cadena 数组 : para (int i = 0; i <5; i ++) getline (cin, list [i]);

15. Recursión de funciones (ejemplo 7.16 de P239)

16. Una función think (), el nombre de la función think es la dirección de la función think ()

Obtener la dirección de la función: proceso (pensar); // Transmitir la dirección de la función pensar () a proceso ()

                        pensamiento (pensar ()); // Transferir el valor de retorno de la función pensar () a pensamiento ()

Declarar puntero de función: double pam (int); double (* pf) (int); pf = pam // pf es un puntero a una función 

double * pf (int); // Indica que pf () devuelve una función de puntero

Llame a una función con un puntero: doble x = pam (4); doble y = (* pf) (5); o doble y = pf (5);

17. La lista de parámetros const double ar [] en el prototipo de función tiene el mismo significado que const double * ar.

La evaluación automática de tipos solo se puede utilizar para una inicialización única simple, no para listas de inicialización.

(1) Prototipo de función:

const double * f1 (const double ar [], int n);

const doble * f2 (const doble [], int);

const doble * f3 (const doble *, int);

(2) Declare punteros a funciones:

const double * (* pa) (const double *, int) = f1; // Declarar un puntero a f1:

const double * (* pb [3]) (const double *, int) = {f1, f2, f3}; // Declare un número de puntero, apunte a f1, f2, f3 e inicialice:

pb es una matriz que contiene 3 punteros, cada puntero apunta a una función, const double *, int como parámetros y devuelve un const double *.

auto pa = pb; // legal

(3) Llamada a función:

const double * px = pb [0] (av, 3); // av, 3 es el parámetro Obtenga el valor devuelto: double x = * pb [0] (av, 3);

const double * py = (* pb [0]) (av, 3); Obtiene el valor devuelto: double y = * (* pb [0]) (av, 3);

18. Cree un puntero a toda la matriz de punteros (P246 Ejemplo 7.19)

Supongo que te gusta

Origin blog.csdn.net/lvliang2017232003/article/details/85759627
Recomendado
Clasificación