1. 遭人遗弃的goto

(1)高手潜规则:禁用goto

(2)项目经验:程序质量与goto出现的次数成反比

(3)最后的判决:将goto打入冷宫(1)循环语句的基本工作方式

【实例分析】goto副作用的分析

#include <stdio.h>
#include <malloc.h> void func(int n)
{
int* p = NULL; if( n < )
{
goto STATUS;
} p = (int*)malloc(sizeof(int) * n);//n<0时,将不被执行 STATUS:
p[] = n; //n<0时,p内存未申请,出现错误 free(p);
} int main()
{
printf("begin...\n"); printf("func(1)\n"); func(); printf("func(-1)\n"); func(-); printf("end...\n"); return ;
}

2. void的意义

(1)void修饰函数返回值和参数——为了表示“无”

  ①如果函数没有返回值,那么应该将其声明为void

  ②如果函数没有参数,应该声明其参数为void

任意参数 无参(用void声明)
#include<stdio.h>

f() //f()函数任意参数,返回值默认int型
{ } int main()
{
int i=f(,,) return ;
}
#include<stdio.h>

void f(void) //无参无返回值
{ } int main()
{
int i=f(,,) //error f(); //ok return ;
}

(2)不存在void变量

  ①C语言没有定义void究意是多大内存的别名,没有void标尺,无法在内存中裁出大小

#include<stdio.h>
void main()
{
void var; //error,不可以是void型的变量
void array[]; //error,同上
void* pv; //ok,void*的指针是可以的。
}

  ②小贴士:ANSI C:标准C语言的规范

扩展C: 在ANSI C的基础上进行了扩充

#include<stdio.h>

int main()
{
//在ANSI C编译器中无法通,支持GNU标准的gcc下为void大小为1,是合法的
printf("sizeof(void)=%d\n",sizeof(void));
}

(3)void指针的意义

  ①C语言规定只有相同类型的指针才可以相互赋值

  ②void* 指针作为左值用于“接收”任意类型的指针

  ③void* 指针作为右值使用时需要进行强制类型转换

int* pI = (int*)malloc(sizeof(int));
char* pC = (char*)malloc(sizeof(char));
void* p = NULL;
int* pni = NULL;
char* pnc = NULL; p = pI; //ok,void*指针p可接收任何类型的指针
pni = p; //error,void*须强制类型转换,即pni =(int*)p;
p = pC; //ok
pnc = p; //error,应为pnc=(char*)p;

【编程实例】通过void*实现MemSet函数

#include <stdio.h>

void MemSet(void* src, int length, unsigned char n)
{
unsigned char* p = (unsigned char*)src; int i = ; for(i=; i<length; i++)
{
p[i] = n;
}
} int main()
{
int a[];//这里可以是任何其他类型,如char a[5];double a[5]等。
int i = ; MemSet(a, sizeof(a), ); for(i=; i<; i++)
{
printf("%d\n", a[i]);
} return ;
}

3. 小结

(1)现代软件工程中禁用goto语句

(2)void是一种抽象的数据类型

(3)void类型不能用于定义变量

(4)void类型用于声明函数无参数或函数无返回值

(5)可以定义void*类型的指针,该指针可接受任意类型的指针值

第8课 goto 和 void 分析的更多相关文章

  1. 第8课 goto和void分析

    遭人遗弃的goto: C语言是一种面向过程的结构化语言,其中主要结构有三种,顺序执行.选择执行.循环执行.再复杂的程序也是由这三种结构组合而成的. goto破坏了结构化特性,使程序以第四种方式执行,结 ...

  2. C语言进阶——goto 和 void 的分析08

    遭人遗弃的goto: 高手潜规则:禁止使用goto 项目经验:程序质量与goto的出现次数成反比 最后的判决:将goto打入冷宫 程序示例1:(goto副作用分析) #include <stdi ...

  3. 第9课 - const 和 volatile分析

    第9课 - const和volatile分析 1. const只读变量 (1)const修饰的变量是只读的,本质上还是变量,并不是真正意义上的常量         ※※ const只是告诉编译器该变量 ...

  4. 第11课 - enum, sizeof, typedef 分析

    第11课 - enum, sizeof, typedef 分析 1. enum介绍 (1)enum是C语言中的一种自定义类型,和struct.union地位相同,格式如下: // enum每个值的最后 ...

  5. 第10课 struct 和 union 分析

    1. struct的小秘密 (1)C语言中的struct可以看作变量的集合 (2)struct的问题——空结构体占用多的内存? [实例分析]空结构体的大小 #include <stdio.h&g ...

  6. 第9课 const和volatile分析

    1. const只读变量——(注意不是真正常量,只是告诉编译器不能出现在赋值号左边!) (1)const修饰的变量是只读的,本质还是变量 (2)const修饰的局部变量在栈上分配空间 (3)const ...

  7. 第10课 struct和union分析

    struct的小秘密:空结构体占多大内存呢? 直观的答案有两种: 1.空结构体的大小为0 2.结构体本来就是为了将不同的变量集合在一起使用的,定义空结构体会导致编译错误 实例分析: #include ...

  8. 【第三课】kaggle案例分析三

    Evernote Export 比赛题目介绍 TalkingData是中国最大的第三方移动数据平台,移动设备用户日常的选择和行为用户画像.目前,TalkingData正在寻求每天在中国活跃的5亿移动设 ...

  9. 第2课 GUI程序实例分析

    1. GUI程序开发概述 (1)现代操作系统提供原生SDK支持GUI程序开发 (2)GUI程序开发是现代操作系统上的主流技术 (3)不同操作系统上的GUI开发原理相同 (4)不同操作系统上的GUI S ...

随机推荐

  1. jQuery waterbubble 水球图

    在线实例 默认效果 显示文本 水球半径 文本颜色 边框宽度 设置字体 数据多少 是否显示波纹 水球颜色 是否显示动画 使用方法 <div class="wrap"> & ...

  2. andriod VideoView

    package com.example.yanlei.myyk; import android.media.MediaPlayer; import android.net.Uri; import an ...

  3. SharePoint 2013 图像呈现形式介绍

    由于图像呈现形式依赖 SharePoint Server 2013 中的其他功能,因此需确保您满足本节中的先决条件,才能执行本文中的过程.先决条件包括: • 发布网站集 您要在其中添加图像呈现形式的网 ...

  4. 原创:SAP LVC ALV编辑小技巧

    前两天有个打印需求变更,需要在ALV显示列表中添加两个字段,可编辑,而我自己用的是函数:REUSE_ALV_GRID_DISPLAY_LVC 因为之前做可编辑基本都是固定套路,定义类,画屏幕.... ...

  5. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q40-Q44)

    Question 40You need to send a single value from a consumer Web Part to a provider Web Part.Which int ...

  6. 使用ObjectOutputStream进行socket通信的时候出现固定读到四个字节乱码的问题

    问题描述: 最近在写一个通信相关的项目,服务器端和客户端通过socket进行通信.本来想利用read的阻塞特性,服务器端和客户端按照一定的流程进行文件读写.结果发现客户端或者服务器read方法一直都返 ...

  7. 使用CocoaPods管理第三方开源类库

    iOS开发中经常会用到许多第三方开源类库,比如AFNetworking.FMDB.JSONKit等等,使用CocoaPods这个工具就能很方便得对工程中用到的类库进行管理,包括自动下载配置以及更新. ...

  8. Apache Shiro 简介

    使用 Apache Shiro 为 web 应用程序进行用户身份验证 Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权.在本文中,了解 Apache Shiro 并通 ...

  9. .net程序员工作两年总结

    (2015年9月) 最近换了工作,面试了很多家公司想总结下,以便以后回顾知道自己是怎么走过来的. 入行背景: 我是半路转行做软件开发的,2011年7月大学专科毕业,大学专业是:机械制造及其自动化:20 ...

  10. 怎样查看linux版本

    玩一台新的linux服务器,首先要做的,就是先看下是什么版本的系统: 命令如下: 登录到linux执行cat /etc/redhat-release ,例如如下: [root@3.5.5Biz-46 ...