码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 基础 (8)

时间:2019-01-04 00:27:40      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:功能   声明和定义   加法   char   空间   strcpy   保存   组元   font   

  1. 复习

 

如何调用库函数(别人写好的函数)

1)       头文件:包含指定的头文件,头文件主要包含此函数的声明

2)       函数名字:函数名字必须和头文件声明的名字一样

 

字符串常用处理函数:

 

1.字符串输入 gets() fgets()

 

char buff[100]

gets(buf) //和 scanf的区别是可以有空格

 

// 最多只能输入99个

fgets(buf,100,stdin);

 

2.字符串的输出 puts() fputs()

技术分享图片

(第一个参数是指针 第二个参数是file,这里使用标准输出

 

3.获取字符串长度: strlen (遇到\0就结束 sizeof不会!

 

4.字符串拷贝: strcpy(直接拷贝 strncpy(多了一个长度

 

5.字符串追加(连接): strcat() strncat()

 

6.格式化输出字符串: printf() sprint()

 

printf(“a = %d\n”,10);

 

“a = 10\n”;

 

sprint(buf,…

// 输出到字符数组buf中

 

7.格式化输入字符串 scanf(“%d”,&a)

  char buf[] = “10”

  sscanf(buf,”%d”,&a

 

8.字符串查询(需要使用返回值

strchr()  // 查询字符

strstr()  // 查询字符串

 

9.字符串切割 strtok()

  strtok(buf,”,”) //切割的时候会把原字符串破坏

  strtok(NULL,”,”) //第二次切割的时候要把指针指向NULL,才能继续切割

 

自定义函数

 

02 作业讲解

 

03 return和exit区别

 

return的作用,终止函数

1、  return主函数(main),程序结束

2、  return其他函数,程序不结束

 

//puts 和 printf的区别: puts会在结尾添加\n ,printf不会 puts只能输出字符串,而printf却可以进行标准化的输出

int I = 10;

printf(“%d”,i)

 

int I = 10;

puts(“%d”,i) //报错

 

技术分享图片

 

 

exit(int )的作用是结束整个程序 //结束进程

相当于把return放到main函数中退出的操作

 

 

4 声明和定义

实现一个函数,功能和strlen一样的, int my_strlen(char str[])

技术分享图片

(图中把函数放到main函数后面了)

编译时候C编译器会报警告,C++会出错,所以应该把声明放到前面

 

技术分享图片

 

只要在调用的前面声明就行了,声明了好多次的情况

 

 技术分享图片

5 分文件(多文件)编程

1、按功能来分 xxx.h xxx.c

2、有一个主函数测试 自定义函数 main.c

 

技术分享图片

 

(创建了俩文件

 

gcc *.c 出现真香警告

 

为了防止警告 应该加入声明

 技术分享图片

 

 

(这样就不报错了

 

想一下 如果我每次要使用都要声明是不是太麻烦了,

如果有三个.c 那是不是要在三个里面都重复的写声明代码

 

于是引入头文件

技术分享图片

 

 技术分享图片

 

技术分享图片

 

头文件的功能是什么

技术分享图片

 

 

(预处理)

 

结论:多个文件中,不能出现同名函数(static除外)

 

xxx.c:

   函数的定义

 

xxx.h:

   .c中函数的声明

 

2、个主函数测试自定义函数 main.c

 

同一个文件如何防止头文件重复包含(包含多次,只有一次生效):

1、  #pragma once

2、

#ifndef _MYSTRLEN_H

#define _MYSTRLEN_H

 

//函数声明

 

#endif

 

include的原理: #include "a.h" ,则会把整个 a.h 文件都copy b.c 的开头

 

xxx.c:

  函数的定义

  

xxx.h

  .c中函数的声明

 

1、  有一个主函数测试自定义函数 main.c

 

多个文件中 不能出现同名函数(static除外

 

同一个文件如何防止头文件重复包含(包含多次,只有一次生效)

 

1.#pragma once

2.define

 

07 指针概述

 

1、  内存,以一个字节为单位分配内存

2、  每个字节的内存都有标号,这个标号就是地址,也叫指针

 

3、  地址需要存储 32位编译器用32(4字节)存此地址 64位编译器用64(8字节)存此地址

 

1、  房间分配号码,内存分配标号,编码

2、  根据房号找到对应的房间,根据地址找到对应的内存,寻址

 

技术分享图片

08 指针补充

 

09 指针的定义和使用

技术分享图片

 

技术分享图片

 

技术分享图片

 

技术分享图片

 

 技术分享图片

 

10 指针变量和指针变量所指向的内存

技术分享图片

 

 技术分享图片

 

 

11 上午知识点复习

 

12 指针练习

技术分享图片

 

13 野指针

 

野指针:这个指针变量保存了一个没有意义(非法)的地址

 

  1. 只有定义后的变量,此变量的地址才是合法地址
  2. 野指针就是保存没有意义地址的指针变量
  3. 操作野指针变量本身不会有任何问题
  4. 操作野指针所指向的内存才导致报错误

技术分享图片

技术分享图片

 

 

14 空指针

 

15 指针大小

技术分享图片

 

 技术分享图片

 

16 多级指针

技术分享图片

技术分享图片

 

 

总结:

  1. 指针变量也是一个变量,是变量就可以赋值
  2. 指针指向谁,就把谁的地址赋值给指针
  3. *p操作的是指针所指向的内存

 

技术分享图片

 

 技术分享图片

 

18 []不是数组专属

 

技术分享图片

 

19 万能指针和指针步长

 

技术分享图片

 

1、  不可以定义void类型的普通变量 不能确定类型 编译器就不知道分配多大空间

void a;

 

可以定义void *变量(因为大小是编译器确定的

 

void * 指针也叫万能指针

 

void *可以指向任何类型的变量(类型匹配)

 

void *p = NULL;

 

int a = 10;

 

p = &a;

 

printf(“*p = %d\n”,*p);  //*p操作指针所指向内存

 技术分享图片

这里会报错,

 

技术分享图片

 

 

 

或者这样写,也是会报错的

 

void *可以指向任何类型的变量,使用指针所指向的内存时,最好转换为它v恩深的指针类型

答案: void *p指向了a了 操作*p的时候不知道应该操作多少字节的内存

     所以就会报错了

技术分享图片

 

 技术分享图片

使用 void *p 的时候只保存了  4个字节中的一个字节

 

int *指向int类型,操作内存时,操作4字节

char *指向char类型,操作内存时,操作1字节

 技术分享图片

int类型4字节

char类型 1字节

 

注意:

1、  指针的加法,不是传提供的假发

2、  步长由指针指向的数据类型决定

 

20 const修饰符的指针

技术分享图片

技术分享图片

 

 

注意加以区分:

 

技术分享图片

 

21 数组名

 

技术分享图片

 

22 指向数组首元素的指针

 

技术分享图片

 

23_通过指针加减访问数组元素

 

技术分享图片

24 作业

C++ 基础 (8)

标签:功能   声明和定义   加法   char   空间   strcpy   保存   组元   font   

原文地址:https://www.cnblogs.com/eret9616/p/10217553.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!