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

/*
* 数组练习
* */
#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. jdk1.8-stack 栈源码分析

    一:类的继承关系 UML图: 类的继承关系: )) { ) { ) );} 分析:栈的peek()方法,其实就是返回栈顶部的元素值,即数组末尾元素值. peek()方法只是返回下标的值,但并不删除该元 ...

  2. 【.NET】ASP.Net IE10+ SCRIPT:XXX_doPostBack 未定义

    问题描述 GridView中分页控件,点击分页无反应,Linkbutton点击无反应,打开Web控制台,发现如下错误:SCRIPTXXX:_doPostBack 未定义:查询后得知,是由于.NET F ...

  3. BUGKU (Take the maze)

    首先进行查壳,没有壳. 随便输入,看程序执行信息.随意输入字符串,提示key error 放到IDA中打开,在左侧函数窗口中找到main0,F5反编译,进行分析.具体已在分析在图中标识. 关于main ...

  4. 【神经网络与深度学习】什么是HDF

    什么是HDF HDF 是用于存储和分发科学数据的一种自我描述.多对象文件格式.HDF 是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要.HDF 可以表示出 ...

  5. mint ui解决Navbar和Infinite scroll共存时的bug

    Navbar和Infinite scroll共同使用时会出现无限加载的问题,滑动也会出现乱加载. 只需要判断一下就可以了,代码: html: <mt-navbar v-model="s ...

  6. [转帖]IntelliJ IDEA 2018.3.3破解方法

    IntelliJ IDEA 2018.3.3破解方法 https://blog.csdn.net/qq_42862882/article/details/86477495 验证了下 也可以激活.   ...

  7. .Net Core Grpc Consul 实现服务注册 服务发现 负载均衡

    本文是基于..net core grpc consul 实现服务注册 服务发现 负载均衡(二)的,很多内容是直接复制过来的,..net core grpc consul 实现服务注册 服务发现 负载均 ...

  8. Python模拟进度条

    import time for i in range(0,101,2) time.sleep(0.2) num = i // 2 per = '\r %s %% : %s'%(i,'*'*num) p ...

  9. mybaits 在test判断数字,或者数字型字符串时注意事项

    1.在test中判断传入值为0的Integer或者Long时,mybaits会将其视为null 解决方法: 把Integer/Long改为String类型. status!=null and stat ...

  10. SqlSugar

    SqlSugar 官网 SqlSugar 源码 SqlSugar NuGet