-
2019-03-09 19:38:35更多相关内容
-
函数体内和函数体外数组的初始化问题
2014-08-19 15:54:39如果没有显式提供元素初值,则数组元素会像普通变量一样初始化: ...在函数体外定义的内置数组,其元素均初始化为0;...不管数组在哪里定义,如果其元素为类类型,则自动为该数组的元素提供显式初始化。如果没有显式对数组提供元素初值,则数组元素会像普通变量一样初始化:- 在函数体外定义的内置数组,其元素均初始化为0;
- 在函数体内定义的内置数组,其元素无初始化;
- 不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化。
- 举个例子:
-
string sa[10]; int ia[10]; int main() { string sa1[10]; int ia1[10]; }
分析:string 是 “类” (英文叫 class),string sa[10]; string sa1[10]; 是string类的 对象,自动 调用string类的默认构造函数,各元素初始化为空字符串。 int ia[10]; 在 main(){} 函数以外,是全局量,全局量自动初始化 为0,这是编译器的规定。 int ia1[10]; 在 main(){} 函数以内,是局部量,局部量编译器不自动作初始化,其值不确定,这也是编译器的规定。
-
在函数中引用外部数组元素
2020-10-29 21:42:51通过数组名引用数组 函数声明:void fun(int arr[],int n); 函数调用:int a[10]={3,7,9,11,0,6,7,5,4,2}; fun(a,10); 示例代码 #include <stdio.h> void fun(int arr[], int n) { int i = 0; for(i=0; i...通过数组名引用数组
函数声明:void fun(int arr[],int n); 函数调用:int a[10]={3,7,9,11,0,6,7,5,4,2}; fun(a,10);
示例代码
#include <stdio.h> void fun(int arr[], int n) { int i = 0; for(i=0; i<n; i++) { printf("%d ", arr[i]); } printf("\n"); } int main(int argc, const char** argv) { int a[5] = {1, 2, 3, 4, 5}; fun(a, 5); return 0; }
编译及运行结果
通过指针引用数组
函数声明:void fun(int arr[],int n); 函数调用:int a[10]={3,7,9,11,0,6,7,5,4,2}; fun(a,10);
示例代码
#include <stdio.h> void fun(int* arr, int n) { int i = 0; for(i=0; i<n; i++) { printf("%d ", arr[i]); } printf("\n"); } int main(int argc, const char** argv) { int a[5] = {1, 2, 3, 4, 5}; fun(a, 5); return 0; }
编译及运行结果
-
C语言:数组
2022-01-25 19:46:24由若干个相同类型 的相关数据项,按顺序存储在一起 ,构成的数组;数组其实是同种类型,有序的数据的集合。 数组名: 用统一的名字命名标识这组数据,这个名字就是数组名。 数组元素: 构成数组的每一个数据项称为...数组:
由若干个相同类型 的相关数据项,按顺序存储在一起 ,构成的数组;数组其实是同种类型,有序的数据的集合。
数组名:
用统一的名字命名标识这组数据,这个名字就是数组名。
数组元素:
构成数组的每一个数据项称为数组的元素
格式:
类型 数组名[ 下标 ][ 下标 ]…; 其中:类型是数组元素的基类型,就是每个元素的类型。
数组分类:
常用的一维数组,二维数组
一维数组:
格式:
类型 数组名[ 常数表达式 ]; int a[10];//个元素都是整数
元素是 a[0],a[1], a[2],…a[9]。
**说明:**一维数组元素在内存中的排列顺序是线性排列,就是连续存储。
引用:
C语言规定只能逐个引用数组元素,而不能一次引用整个数组。
引用形式:
数组名 [ 下标 ]
其中数组在引用时其下标必须要落在0到n-1的范围内,不然会出现越界,系统不对越界做检查,需要程序员自己检查。其实一个数组元素就是一个变量名,和变量一样使用。
一维数组初始化:
在定义数组时可以给数组初始化:
可全部初始化
也可以部分初始化
在对全部数组元素进行赋值时,可以不指定数组长度
当数组被说明为静态(static)存储类型或者外部存储类型(在所有函数外部定义)时,则在不显示给出初值的情况下,数组元素将在程序编译阶段自动初始化为0。下图
二维数组:
格式:
类型 数组名[ 常数表达式 ] [ 常数表达式 ]; 下图
元素是按行存储
**引用:**数组名 [ 下标 ][ 下标 ], 下标可为整型也可以是常数表达式,
每个数组元素也是一个变量,可以当变量使用。
如果对全部元素赋初值,则定义数据时对第一维长度可以不指定,但是第二维长度不能不写。
一维数组名作为函数参数:
使用简单变量作函数参数,能由实参向形参传递一个数据。但是使用数组名作为函数参数,属于“地址调用”能从主调函数向被调函数传递数组的首地址,并能由被调函数向主调函数传递多个数据。
传递方式:属于赋地址调用,将实参数组首地址传给虚参,虚参也是一个数组名。
虚参要求:必须是数组名
实参要求:可为凌一个数组名
虚实结合:实参和虚参有相同的首地址,虚参改变整个地址内的内容后,实参内容也在变。
函数传递示意图:
但从传值上面来说,还是单方向传递的,只能从实参传递给虚参,虚参不可以再传给实参。
二维数组名作为函数参数#include <stdio.h> #define ROW 2 //二维数组的行数 #define COL 2 //二维数组的列数 //4个版本的求和函数 //方式一:数组形式 int TwoDimArraySum1(int twoDimAr[][COL], int row, int col); //方式二:指针形式,prArray是一个指向包含COL个int的数组的指针 int TwoDimArraySum2(int (*prArray)[COL], int row, int col); //方式三:指针形式,pr是一个指向int的指针 int TwoDimArraySum3(int *pr, int row, int col); //方式四:变长数组(C99开始支持) int TwoDimArraySum4(int row, int col, int twoDimAr[row][col]); int main(void) { int twoDimArray[ROW][COL] = {{-2, 5}, {4, 9}}; int result; //方式一 result = TwoDimArraySum1(twoDimArray, ROW, COL); printf("Sum1函数结果:%d\n", result); //方式二 result = TwoDimArraySum2(twoDimArray, ROW, COL); printf("Sum2函数结果:%d\n", result); //方式三 result = TwoDimArraySum3(twoDimArray[0], ROW, COL); printf("Sum3函数结果:%d\n", result); //方式四 result = TwoDimArraySum4(ROW, COL, twoDimArray); printf("Sum4函数结果:%d\n", result); return 0; } int TwoDimArraySum1(int twoDimAr[][COL], int row, int col) { int i, j; int result = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { //下面两种寻址方式都行 result += twoDimAr[i][j]; // result += *(*(twoDimAr + i) + j); } } return result; } int TwoDimArraySum2(int (*prArray)[COL], int row, int col) { int i, j; int result = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { //下面两种寻址方式都行 result += prArray[i][j]; // result += *(*(prArray + i) + j); } } return result; } int TwoDimArraySum3(int *pr, int row, int col) { int i, j; int result = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { //下面两种寻址方式都行 result += pr[i*col + j]; // result += *(Pr + i*col + j); } } return result; } int TwoDimArraySum4(int row, int col, int twoDimAr[row][col]) { int i, j; int result = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { //下面两种寻址方式都行 result += twoDimAr[i][j]; // result += *(*(prArray + i) + j); } } return result; }
字符数组的定义:
**格式:**char 数组名 [ 常数 ] [ 常数 ]…;字符数组初始化:
字符数组的引用:
引用字符数组中的一个元素,就是得到一个字符。
C语言中没有字符串数据类型,C语言是将字符串作为字符数组处理。
字符数组和字符串的关系:
字符串输入:
这里scanf遇到空格会将认为是结束。后面的数据就丢失了
字符串输出:
这里字符串的长度是6,不是5 ,还有一个’\0’,在最后,是系统自动加的,因为这是字符串结束的标志。
字符串处理函数:
下面这些函数都有标准库函数都在<string.h>里面。
字符串连接函数-------strcat
字符串复制函数--------strcpy()
字符串比较函数------strcmp
注意:这里比较是对应元素比较,一方大于另一方就比较完了,不是按长度比较。
字符串长度函数------strlen
这里和siaeof运算符不一样,这里不计算’\0’,sixeof计算’\0’.
字符串小写函数-----strlwr
字符串大写函数-----strupr
-
函数与数组的定义与应用
2020-11-11 12:07:54在写程序过程中可以在任何地方调用该函数,不必重复编写。shell函数和变量类似,必须先定义才可以调用,如果定义不调用则不会被执行。数组其实也算是变量,传统的变量只能存储一个值, 但数组可以存储多个值。 -
一维数组的初始化问题(函数体内与函数体外)
2017-11-19 09:10:37数组元素初始化时,若没有显式提供幸元素的值,则元素会被像普通变量...如果不是内置类型,则不管其在哪定义,自动调用其默认构造函数为其初始化,若该类型无默认构造函数则会报错。 下面针对1和2的不同给出具体例子: -
数组放在main函数内外的区别
2022-01-24 22:50:01大数组一定要开设在main函数之外,避免在main函数里爆栈! -
C语言函数可以修改数组的值吗
2022-03-19 14:51:09代码给你答案 答案是可以的,因为传入的是数组的首地址 #include void fun(int *a,int n) { int i,t; for(i=0;i -
#多么痛的领悟# 关于数组中的元素默认初始值
2013-12-08 17:04:58C++规定,数组在函数内外初始化值是不同的,即使是main()函数也不例外,比如我们没有初始化一个int数组,如果在函数外面定义,那么int数组中的元素全为0.如果在函数里面的定义的话(包括main()函数)那int数组中的... -
python定义数组
2020-11-21 04:07:26一、一维数组 1. 直接定义matrix=2. 间接定义matrix=print(matrix)输出:3. 数组乘法matrix=*5print(matrix)输出:二、二维数组 1. 直接定义(3*2)matrix=,]2. 间接定义(3*2)matrix= for i in ra... -
为什么大数组要定义在main函数外
2020-03-09 11:27:08定义打数组时定义在了main函数内部,结果编译是通过的,但是却不能进行输入操作进行本地样例测试检查后发现是大数组问题! 定义在main函数外就是定义全局变量。因为在所有子程序(包括main函数)中开设的变量都会在... -
C++大数组要定义在main函数外部的原因
2020-04-23 21:37:48为了防止栈溢出,俗称爆栈 -
C/C++|数组定义在main内外的区别
2021-10-09 15:18:50之前一直接在main函数里面对数组进行定义。直到一次运行的时候,代码并没有问题,但是每次运行的时候都会出现停止工作的问题。测试了很久才发现是因为把数组开在了main函数里面的问题 那么把数组开在main函数的里面... -
将大数组定义在函数体外
2021-03-16 20:56:33Take notes: 如果数组大小较大(大概10^6级别),则需要将其定义再主函数外面,否则会使程序异常退出,原因是函数内部申请的局部...而函数外部申请的全局变量来自静态存储区,允许申请的空间较大。 –摘自算法笔记 ... -
shell脚本详解之函数及数组
2021-12-22 16:32:36语句块定义成函数约等于别名,定义函数,再引用函数 封装的可重复利用的具有特定功能的代码 函数的基本格式 法一: [function] 函数名 (){ 命令序列 [return x] #使用return或者exit可以显式的结束函数 ... -
Shell之函数与数组 (超详细的函数与数组例子)
2020-09-22 12:11:41Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。 Shell 中的函数和C++、Java、Python、C# 等其它编程语言中的函数类似,只是在语法细节有所差别。 -
Linux Shell脚本之函数及数组
2021-10-26 15:50:58定义数组的方法 数组的数据类型 获取数组的数据列表 获取数组长度 获取取数组下标对应的值 数组的遍历 数组的切片 数组的替换 数组删除和指定下标的值删除 数组追加元素 查看所有数组 三、冒泡排序 ... -
C++ 向函数传递数组
2017-10-14 16:38:55C语言中不能向函数传递数组,但是C++中是可以的。这样就方便了许多 ...要想在函数中操作数组,只能传递指向数组的指针, 然后通过指针来操作数组,即:计算指针的偏移量来访问函数外的数组。 C++中是可以 -
C++函数参数为数组时的问题,复制还是指针?
2018-09-05 22:25:57众所周知,函数在传参数时会复制参数,但传指针时,只是复制了指针本身,而没有复制指针指向的值,所以可以通过传指针或引用来使函数内可以修改外部的值。那么,对于数组,会怎样? 上测试程序 #include<... -
c学习笔记:函数(指针数组、二级指针、指针作为函数参数、数组名作为函数参数、字符数组名作为函数参数)
2019-09-21 15:48:37案例1:普通变量作为函数的参数(函数内部修改不了函数外部的值) 案例2:指针变量作为函数的形参 知识点4:数组名作为函数的参数 知识点5:字符数组名作为函数的参数 知识点7:字符串指针变量 与 字符数组的... -
实验3 函数和数组
2018-08-29 20:14:11实验3 函数和数组 ... 掌握数组在函数参数中的传递方式。 掌握一维数组的排序,并用二维数组处理矩阵。 二、知识要点 (一)函数 1. 函数的定义格式 <类型名><函数名&g... -
C语言——函数定义及用法【内部函数&外部函数&内联函数】
2020-02-05 11:41:09目录: 一:定义 二:函数的一般形式 组成部分 1.返回类型 ...外部函数&内联函数 1.内部函数 定义: 2.外部函数 定义: 3.内联函数 定义: 注意: 七:main 函数的参数 1. main 函数带参... -
python类中调用外部函数,python 函数中 定义类
2020-12-22 14:05:34Q1:python函数里的数组如何在函数外调用出来使用返回值的方法有两种:可以直接把调用的函数作为变量使用可以用调用函数给一个变量赋值第一种情况见如下例子:l = [1,2,3,4,5]def add_element(list, element):list.... -
你如何在c头文件中声明数组?
2021-05-23 04:13:00在this question和其他人中,我们看到我们可以在一个很好的步骤中声明和初始化字符串数组,例如:const char* const list[] = {"zip", "zam", "bam"}; //from other question这可以在执行没有麻烦的函数的情况下完成... -
c语言函数的数组返回和指针返回
2019-04-13 10:09:52函数内的数组和指针都是属于函数栈空间。如果把数组或指针返回给外部指针,会发生什么? 1先看看第一种,返回数组; #include "stdio.h" char * get_c() { char ch[]="hello"; //这是一个栈空间 char *p; /... -
由于数组定义在函数体内部,导致栈溢出的情况
2018-05-20 09:03:08最近在做清华的一道范围查询的题目,由于要求是到500000,所以我就把部分数组定义在了main函数外面。// #include<iostream> #include <stdio.h> #include<string.h> //... -
定义struct结构体数组
2020-03-24 22:00:23设一个结构体数组,数组中包含3个元素 每个元素中的信息应包括候选人的姓名(字符型)和得票数(整型) 输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成员的值加1 输出... -
【C】C语言函数(包括:函数编写位置、数组作函数实参)
2018-05-05 09:35:47函数概述 函数的分类 函数是C语言程序基本的组成单位,每个程序有且只能有一个主函数(main()),...在函数定义及函数声明时的参数,称为形参;在函数调用时的参数,称为实参。 在C语言中,一个函数的函数体中(包... -
大数组定义在main函数外部的原因
2019-04-21 16:01:16大数组要定义在主函数外部的原因 全局变量在静态存储区内分配内存,而局部变量是在栈...因此,当我们需要定义一个极大的数组时,最好在mian 函数外部定义这个大数组。 作者: 妖刀 来源:CSDN 原文:https://blog.c... -
C++ 传递数组给函数
2020-05-21 15:24:21也就是说遍历函数中数组参数,实际上是遍历实参,而且也会改变外部实参 # include<iostream> # include<string> using namespace std; struct Hero { // 姓名 string name; //年龄 int age; //...