数组名称不可以代表任何存储区(数组名称不可以被赋值),数组名称可以代表数组里第一个存储区的地址

/*
* 数组练习
* */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int arr[7] = {0}, arr1[7] = {0}, tmp = 0, cnt = 0, num = 0, num1 = 0;
srand(time(0));
do {
tmp = rand() % 36 + 1;
//检查新数字是否可以使用
for (num = 0;num <= cnt - 1;num++) {
if (tmp == arr[num]) {
break;
}
}
//如果for循环正常结束就说明新数字可以
//使用,否则不能使用
if (num >= cnt) {
arr[cnt] = tmp;
cnt++;
}
} while (cnt < 7);
for (num = 0;num <= 6;num++) {
printf("%d ", arr[num]);
}
printf("\n");
for (num = 0;num <= 6;num++) {
printf("请输入一个数字:");
scanf("%d", &arr1[num]);
}
cnt = 0;
for (num = 0;num <= 6;num++) {
for (num1 = 0;num1 <= 6;num1++) {
if (arr[num] == arr1[num1]) {
cnt++;
break;
}
}
}
printf("买对的数字个数是%d\n", cnt);
return 0;
}

可以对数组名称进行sizeof计算,结果是数组里所有存储区的总大小

/*
* 变长数组演示
* */
#include <stdio.h>
int main() {
int size = 0;
printf("请输入一个整数:");
scanf("%d", &size);
int arr[size]; //变长数组
printf("sizeof(arr)是%d\n", sizeof(arr));
return 0;
}

C99规范里允许使用变长数组,声明变长数组的时候用变量表示数组里的存储区个数,如果程序多次运行则每次运行的时候变长数组里包含的存储区个数都可能不同,某一次程序执行过程中变长数组里包含的存储区个数不会改变,变长数组不可以初始化

多维数组可以用来表示存储区的分组情况,不能表示存储区分组情况的数组叫一维数组,二维数组可以表示存储区的一次分组情况,这是最常见的多维数组.声明二维数组的时候需要提供两个整数,第一个整数表示分组个数,第二个整数表示每组里的存储区个数.二维数组名称后加两个下标可以表示二维数组里的一个存储区,前一个下标是分组编号(组下标),后一个下标是存储区编号(组内下标),组下标的有效范围从0开始到分组个数减一为止,组内下标的有效范围从0开始到组内存储区个数减一为止,可以采用多重循环依次处理二维数组里的每个存储区

/*
* 二维数组演示
* */
#include <stdio.h>
int main() {
int arr[][2] = {{1, 2}, {3}, {6}}; //二维数组演示
//arr[1][0] = 10;
int row = 0, col = 0, num = 1;
/*for (row = 0;row <= 2;row++) {
for (col = 0;col <= 1;col++) {
arr[row][col] = num;
num++;
}
}*/
for (row = 0;row <= 2;row++) {
for (col = 0;col <= 1;col++) {
printf("%d ", arr[row][col]);
}
printf("\n");
}
return 0;
}

可以把二维数组当作一维数组进行初始化,也可以在初始化的时候对初始化数据进行分组,每组初始化数据用来初始化一组存储区,如果可以根据初始化数据计算出分组个数就可以省略二维数组声明里的分组个数

二维数组名称也用来代表二维数组里第一个存储区的地址对二维数组名称进行sizeof计算结果是二维数组里所有存储区的总大小

可以在二维数组名称后只使用一个下标,这个下标是组下标。这个写法代表那一组里第一个存储区的地址。二维数组名称后加一个下标也可以看作是一个一维数组,这个一维数组里包含下标对应组中所有的存储区。

/*
* 扫雷游戏练习
* */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int map[10][10] = {0}, row = 0, col = 0, cnt = 0, num = 0;
int delta[][2] = {-1, -1, -1, 0, -1, 1,
0, -1, 0, 1, 1, -1, 1, 0, 1, 1};
int tmp_row = 0, tmp_col = 0;
srand(time(0));
do {
//找到一个随机位置
row = rand() % 10;
col = rand() % 10;
if (!map[row][col]) {
//如果这个位置里不是地雷就放一个地雷
map[row][col] = -1;
cnt++; //地雷个数加一
}
} while (cnt < 10);
for (row = 0;row <= 9;row++) {
for (col = 0;col <= 9;col++) {
if (map[row][col] == -1) {
continue;
}
for (num = 0;num <= 7;num++) {
tmp_row = row + delta[num][0];
tmp_col = col + delta[num][1];
if (tmp_row < 0 || tmp_row > 9) {
continue;
}
if (tmp_col < 0 || tmp_col > 9) {
continue;
}
if (map[tmp_row][tmp_col] == -1) {
map[row][col]++;
}
}
}
}
for (row = 0;row <= 9;row++) {
for (col = 0;col <= 9;col++) {
if (!map[row][col]) {
printf("O");
}
else if (map[row][col] == -1) {
printf("X");
}
else {
printf("%d", map[row][col]);
}
}
printf("\n");
}
return 0;
}

C语言里可以采用分组方式管理语句,每个语句分组叫做一个函数

多函数程序执行时的时间分配情况必须遵守以下规则
  1.整个程序的执行时间被分成几段,每段被分配给一个函数使用
  2.所有时间段之间不能互相重叠并且必须连续
  3.如果函数A把自己的时间分配给函数B使用则函数B结束后必须把后面的时间还给函数A

如果函数A把自己的时间分配给了函数B则它们之间存在函数调用关系,在这个函数调用关系中函数A叫做调用函数,函数B叫做被调用函数,只有在被调用函数工作期间才存在函数调用关系

函数调用语句可以在函数之间产生函数调用关系

/*
* 函数演示
* */
#include <stdio.h>
void func(void) {
int num;
printf("num是%d\n", num);
num = 10;
}
void func1(void) {
int num = 1000;
func();
}
int main() {
func();
func1();
return 0;
}

不可以跨函数使用变量,不同函数里的变量可以重名,如果函数多次执行则每次执行的时候里面的变量对应的存储区都可能不同,可以使用volatile关键字声明变量,这种变量的内容可以被其他程序修改

标准C语言(6)的更多相关文章

  1. 关于标准C语言的预定义宏【转】

    标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义.下面预定义宏表,被我抄了下来. __LINE__  当 ...

  2. 【部分原创】标准C语言的优先级、结合性、求值顺序、未定义行为和非确定行为浅析

    零. 优先级    在C++ Primer一书中,对于运算符的优先级是这样描述的:     Precedence specifies how the operands are grouped. It ...

  3. 标准SQL语言的用法

    原文链接:http://www.ifyao.com/2015/05/18/%E6%A0%87%E5%87%86%E7%9A%84sql%E8%AF%AD%E8%A8%80%E4%BD%BF%E7%94 ...

  4. 关于标准C语言的预定义宏

    标准C语言预处理要求定义某些对象宏,每个预定义宏的名称一两个下划线字符开头和结尾,这些预定义宏不能被取消定义(#undef)或由编程人员重新定义.下面预定义宏表,被我抄了下来.__LINE__  当前 ...

  5. UML标准建模语言与应用实例

    一.基本信息 标题:UML标准建模语言与应用实例 时间:2012 出版源:科技创新导报 领域分类:UML标准建模语言 面向对象 系统分析与设计 二.研究背景 问题定义:UML建模语言用图形来表现典型的 ...

  6. UML(统一建模语言)是通用的可视化标准建模语言。由构造块、公共机制、构架三部分组成。

    UML UML(统一建模语言)是通用的可视化标准建模语言.由构造块.公共机制.构架三部分组成. 1.构造块:包括基本的UML建模元素(类.接口.用例等).关系(关联关系.依赖关系.泛化关系.实现关系) ...

  7. 标准C 语言总结

    ***************C语言****************** --day01-- Linux是一个和Windows类似的操作系统 通常通过终端软件使用Linux操作系统 终端软件里只能使用 ...

  8. 标准C语言(1)

    C语言程序的绝大部分内容应该记录在以.c作为扩展名的文件里,这种文件叫源文件,C语言里还包含以.h作为扩展名的文件,这种文件叫做头文件 C语言程序里可以直接使用数字和加减乘除四则运算符号(*代表乘法, ...

  9. 【M35】让自己习惯于标准C++语言

    1.最近一些年C++语言增加的特性有: a.RTTI,namespace,bool,关键字mutable和explicit,enums,以及const static int可以直接初始化. b.扩充了 ...

  10. 标准C语言的输入输出流(i/o)方法详解

    cppreference.com -> 标准 C I/O ->详细说明 标准 C I/O clearerr 语法: #include <stdio.h> void cleare ...

随机推荐

  1. java源码-LinkedHashMap类设计

    LinkedHashMap 继承于 hashMap LinkedHashMap .Entry 继承 HashMap.Node 继承 Map.Entry类 LinkedHashMap .Entry 该E ...

  2. 跨平台python异步回调机制实现和使用方法

    跨平台python异步回调机制实现和使用方法 这篇文章主要介绍了python异步回调机制的实现方法,提供了使用方法代码 1 将下面代码拷贝到一个文件,命名为asyncore.py 代码如下: impo ...

  3. C# 反转单向链表

    static void Main(string[] args) { Mynode mynode0 = new Mynode(); Mynode mynode1 = new Mynode(); Myno ...

  4. <li>元素的排序

    要点: getElementsByTagName("li")返回的是HTMLCollection对象,这个对象不同于Array对象,不能使用sort()方法进行排序~ 下面方法的要 ...

  5. SQL:SQL优化

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. python数据存储--JSON

    HTML正文存储为两种格式:JSON和CSV. 存储为JSON: 首先利用Requests访问http://seputu.com获取HTML文档: #!coding:utf-8 import requ ...

  7. Java并发编程之程序运行堆栈分析

    Java程序运行的堆栈分析 1.JVM运行时数据区 JVM通过加载class文件的数据来执行程序.JVM在运行时会划分不同的区域以存放数据.如下图所示: 线程共享部分:所有线程都能访问这块内存的数据, ...

  8. SQLSERVER去除某一列的重复值并显示所有数据\DISTINCT去重\ISNULL()求SUM()\NOT EXISTS的使用

    进入正题,准备我们的测试数据 1.我们要筛选的数据为去除 GX 列的重复项 并将所有数据展示出来,如图所示: ' 2.这种情况下我们是不可以使用DISTINCT来去重的,我们可以来尝试一下: 首先,单 ...

  9. 神经网络的debug

    先建一个只有一层隐藏层的网络确定一切工作正常 在一个数据点上训练,training accuracy应该马上到100%而val accuracy等于随机猜测(overfit),如果不是说明有bug. ...

  10. 时间转换:DateTimeExtensions

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...