C++学习5

姓名:张立斐   学号:19020700001   学院:电子工程学院 

转自:https://blog.csdn.net/lvliang2017232003/article/details/85759627

【嵌牛导读】C++学习

【嵌牛鼻子】C++

【嵌牛提问】如何学习C++?

【嵌牛正文】

1.C++的函数返回值不能是数组,但可以是整数、浮点数、指针、结构或对象。可以将数组作为结构或对象的组成部分来返回。

2. int arr[];

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

3.将数组类型和元素数量告诉数组处理函数,用两个不同的参数传递:void fillArray(int arr[], int size);

不要用 void fillArray (int arr[size]);

4. const Size=8;

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

void main(){

int cook[Size]={1,2,3,4,5,6,7,8}; cout<<sizeof cook ; //显示的长度是32

int sum=sum_arr(cook,Size); }

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

cout<<arr; cout<<sizeof arr; //显示的长度是4, cook和arr指向同一个地址,

                                        但sizeof cook是32(整个数组的长度),sizeof arr是4(指针变量的长度)

......

}

5.保护数组,使数组视为可读数据时,用const声明

函数要修改数组,原形:void f_modify( double arr[], int n);

函数不修改数组,原形:void f_nochange(const double arr[], int n);

8.使用数组区间的函数:

const Size=8;

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

void main(){

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

int sum=sum_arr(cook,  cook+Size);  }

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

int total=0;    const int * pt; 

for (pt=begin; pt!=end; pt++)

  total=total+ *pt;

}

9.一般将指针参数声明为 指向一个常量对象的指针,不能使用指针来修改所指向的值,而能修改指针指向的位置。

int age=39;

const int * pt=&age; //指向一个常量对象的指针,不能使用指针来修改所指向age的值 ,可以使pt指向其他位置  *pt+=1; (不合法)

int * const finger=&age;//指针本身为常量,不能修改指针指向的位置,但可以用finger修改age的值

以上finger, *pt是const ,*finger 和pt 不是const.

禁止将常量数组的地址赋给非常量指针,可以使用强制类型转换来突破这种限制。(P222)

10.函数与二维数组:

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

sum的原形: int sum( int (*arr2)[4] , int size); // (*arr2)[4] 表示由4个int组成的数组的指针  size表示行数

            或者:int sum( int arr2[][4], int size);  //这两个原形arr2是指针而不是数组

( int *arr2[4] 表示由4个指向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.函数与结构:函数返回的是结构

#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";

}

传递结构地址时,函数不定义为由返回的类型比较方便

#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. 声明string数组: string list[5];

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

15.函数的递归(P239例7.16)

16. 一个函数think() ,函数的名字think即为函数think()的地址

获取函数地址:process(think);  //传输think()函数的地址给process()

                        thought(think());  //传输think()函数的返回值给thought()

声明函数指针:double pam( int ); double (*pf) ( int ); pf=pam // pf是一个指向函数的指针

double *pf ( int ) ;//表示pf() 返回是指针的函数

用指针调用函数: double x=pam(4);  double y=(*pf) (5); 或者 double y=pf (5);

17.在函数原型中参数列表const double ar[] 与const double *ar的含义相同。

自动类型判断auto只能用于简单的单只初始化,不能用于初始化列表。

(1)函数原型:

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

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

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

(2)声明指向函数的指针:

const double * (*pa) (const double *, int )=f1; //声明一个指针,指向f1:

const double * (*pb[3]) (const double *, int )={ f1,f2,f3 }; // 声明一个指针数字,指向f1、f2、f3,并初始化:

pb是一个包含3个指针的 数组,每个指针指向一个函数,const double *, int作为参数,并返回一个const double *。

auto pa=pb;  //合法

(3)函数调用:

const double  *px=pb[0] (av,3); //av,3是参数    获取返回的值: double x=*pb[0] (av,3);

const double  *py= (*pb[0]) (av,3);                    获取返回的值: double y=*(*pb[0] ) (av,3);

18.创建指向整个指针数组的指针(P246例7.19)

————————————————

版权声明:本文为CSDN博主「lvliang2229」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/lvliang2017232003/article/details/85759627

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

  • 姓名:张立斐 学号:19020700001 学院:电子工程学院 转自:https://blog.csdn.net...
    zlf阅读 340评论 0 0
  • 技术交流QQ群:1027579432,欢迎你的加入! 1.Cpp中的指针 每个变量都有一个内存位置,每一个内存位置...
    CurryCoder阅读 2,675评论 0 1
  • valarray类简介 valarrray类是由头文件valarray支持的。顾名思义,这个类用于处理数据。他支持...
    鬼枭嗜阅读 495评论 0 0
  • 2018年8月17日 22:14:16 title: C++PrimerPlus读书笔记typora-root-u...
    _layty阅读 215评论 0 0
  • 技术交流QQ群:1027579432,欢迎你的加入! 1.Cpp中的数组 C++支持数组数据结构,它可以存储一个固...
    CurryCoder阅读 1,570评论 0 1