=0) { r=a%b; a=b; b=r; } printf("%d",a); } 函数递归调用版本 #include int aristo(int a,int
01数组元素作函数实参 1、数组元素可以用作函数实参,不能用作形参。 2、在用数组元素作函数实参时,把实参的值传给形参,是“值传递”方式。 3、数据传递的方向是从实参传到形参,单向传递。...02 数组名作函数参数 1、除了可以用数组元素作为函数参数外,还可以用数组名作函数参数。...2、用数组元素作实参时,向形参变量传递的是数组元素的值,而用数组名作函数实参时,向形参传递的是数组首元素的地址。 3、用数组名作函数参数,应该在主调函数和被调函数分别定义数组。...4、实参数组与形参数组类型应一致,如不一致,结构出错。 5、形参数组可以不指定大小,在定义数组时在数组名后面跟一个指针变量,用来接收一个地址。...C语言 | 统计捐款人数及人均捐款数 更多案例可以go公众号:C语言入门到精通
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说C语言辗转相除法求最大公约数_辗转相除法c++,希望能够帮助大家进步!!!...一、题目分析 求12和18的最大公约数,一般我们会想到从1开始一直到12除1,18除1,然后再一起除2....直到找出都能除到的最大公约数,但是这样12和18我们至少要运行12次,一旦数字多了我们运行的内存和时间都会变大...所以我们可以使用辗转相除法 我们令a=12 b=18,t=a%b 用t=12%18=12,令a=b=18,b=t=12; t=18%12=6,令a=b=12,b=t=6; t=12%6=0,a=b=6...总结: 辗转相除法,要明确终止条件,通过a和b取余,用t储存余数,再进行挪位,直到b=0, 就有最大公约数a;明确逻辑后,代码就比较简单,只需要一个循环语句就可以实现。...今天文章到此就结束了,感谢您的阅读,Java架构师必看祝您升职加薪,年年好运。
结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行的操作 : 结构体可以进行 拷贝 赋值操作, 可以作为 函数参数 和 函数返回值; 1....->name 分析 : 获取 结构体中的 name 字符串的值(注意不是指针|地址); -- *p++->name 分析 : 先获取 name 字符串的值, 再将p自增; 结构体函数示例 : /****...结构体数组 (1) 结构体数组声明初始化 声明结构体数组 : -- 声明结构体的时候声明结构体数组 : 格式为 : struct 结构标记 {} 数组名[]; -- 使用结构标记声明结构体数组 :...需求 : 实现一个统计 C 语言关键字出现次数; 代码 : /********************************************************************...low : 其中 low 是首元素的 首地址, high 是 尾元素的尾地址, 只有这样 它们的差的 0.5 倍才是准确的中值的首地址; 指针指向数组注意点 : 不要生成非法的指针, 指针不能指向数组之外的元素
数组元素作函数实参 数组元素就是变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的, 在发生函数调用时,把作为实参的数组元素的值传递给形参,实现单向的值传送。...用数组元素作实参时,向形参变量传递的是数组元素的值。 用数组名作函数实参时,向形参传递的是数组首元素的地址。 例子: 有一个一维数组score,内放10个学生成绩,求平均成绩。...用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组, 都必须有明确的数组说明,当形参和实参二者不一致时,即会发生错误。...在用数组名作函数参数时,不是进行值的传送,是把实参数组的首地址赋子形参数组名, 而不是把实参数组的每一个元素的值都赋予形参数组的各个元素。...用多维数组名作函数参数 多维数组元素与一维数组元素一样,可以看作一个变量,所以在调用函数时可以作为实参,进行值的传递。
大家好,又见面了,我是你们的朋友全栈君。 一:数组元素作为函数的实参 数组元素就是变量,与普通变量没有区别,将数组元素传送给形参,实现单向的值传递。...:%d",m); } 二:数组名作为函数的实参 实质是地址的传递,将数组的首地址传给形参,形参和实参共用同一存储空间,形参的变化就是实参的变化。...:"); for(int i = 0;i < 10; i ++){ scanf("%d",&a[i]); } printf("排序后的数组顺序是:"); sort(a,10); for(int...i = 0; i < 10; i++){ printf("%d ",a[i]); } } 三:二维数组名作为函数参数 第一维的大小可以不指定,第二维的大小必须指定。...实参传送的是二维数组的首地址,使得二维数组a与b共用同一存储单元,即a[0][0]与b[0][0]共用同一存储单元,a[0][1]与b[0][1]共用同一存储单元。
非数组 递推 #include int main() { long long n,a=1,b=1,s=0,i; scanf("%lld",&n); if(n<3) printf...("1"); else { for(i=3;i<=n;i++) { s=a+b; a=b; b=s; } printf("%lld",s); } } 数组 递推...for(i=0;i<n;i++) { if(i<2) f[i]=1; else f[i]=f[i-1]+f[i-2]; } printf("%lld\n",f[n-1]); } 函数
大家好,又见面了,我是你们的朋友全栈君。 在C语言中,指针是一个很重要但是又很容易弄错的概念,也可以说指针就是C语言的灵魂,所以说学好指针对于完全掌握C语言是一个必须的过程。...而在指针中,指针函数、函数指针、指针函数数组、函数指针数组、指向函数指针数组的指针等等概念看着又绕又头疼。本问总结了一下以上一些概念以及用法,并给出例程深化理解。 1....函数指针数组 顾名思义,就是每个元素都是函数指针的数组,直接在函数指针名后面加上数组符号[ ]即可。...C语言函数不可以定义为数组,只能通过函数指针来操作定义函数指针数组。 5....,而void(* )( )表示函数指针,两者结合起来就是指向函数指针数组的指针。
:strlen,求字符串有效长度 方法:strlen(字符数组名) //结果为字符数组有效字符长度,不包含末尾的’ /0′ 注意: 当数组作为函数參数传递时,数组名代表的是数组的首址,...“ sizeof(a)= “ << sizeof (a) << endl; Sum(a); } 运算结果为: sizeof(a)=40 sizeof(array)=4 分析: 当数组作为函数參数传递时...,数组名代表的是数组的首址,即指针,而非数组内容。...假设传递整个数组,会导致栈溢出的。 所以在主函数中使用sizeof计算出的是准确的数组长度。...而在调用函数中,因为传递的数组不再是数组本身,而是其地址,所以用sizeof计算出的,实际上是数组地址的长度,这时的sizeof(array),实际上是sizeof(int)。
C语言允许用字符串的方式对数组作初始化赋值。...这是由于在C语言中规定,数组名就代表了该数组的首地址。 整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10],在内存可表示如图4.2。...在执行函数printf(“%s”,c) 时,按数组名c找到首地址,然后逐个输出数组中各个字符直到遇到字符串终止标志’/0’为止。...字符串常用函数 C语言提供了丰富的字符串处理函数, 大致可分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索几类。 使用这些函数可大大减轻编程的负担。...然而C语言规定可以把一个二维数组当成多个一维数组处理。 因此本题又可以按五个一维数组处理, 而每一个一维数组就是一个国家名字符串。用字符串比较函数比较各一维数组的大小,并排序, 输出结果即可。
Int x[]={1,2}; Char ca[5]={‘a’,‘A’,‘B’,‘C’,‘D’}; 数组名即代表数组的地址,数组的地址==数组名(ca)==数组的首元素的地址&ca[0] 在内存中,内存从大到小进行寻址...0; } Array数组与ages数组的地址一致,若以数组作为函数的参数,这种传递方式是传址调用,传递的是整个数组的地址,修改形参数组元素的值,就是修改实参的值。...当你把一个数组当做参数来传递时,它会看做是一个指针,在该函数体内使用sizeof运算符来计算数组的长度,得出的数值永远为8,而非数组的实际长度,因为任何类型的指针都占8个字节的存储空间。...提示:数组作为一个函数的参数时,如果函数体涉及到数组遍历等操作,通常把数组的实际元素个数也作为参数传递给函数。...使用场合:五子棋,俄罗斯方块等, 假设: char Y[3][2]={ {‘A’,‘B’}, {‘C,‘D’}, {‘E,‘F’} }; 内存情况: ?
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。...声明数组 在 C 中要声明一个数组,需要指定元素的类型和元素的数量,如下所示: type arrayName [ arraySize ]; 这叫做一维数组。...arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C 数据类型。...初始化数组 在 C 中,您可以逐个初始化数组,也可以使用一个初始化语句,如下所示: double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0}; 大括号 { }...所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。以下是上面所讨论的数组的的图形表示: ?
:0 1 2 3 4 5 6 7 8 9 十六进制的数字:0 1 2 3 4 5 6 7 8 9 10-a 11-b 12-c 13-d 14-e 15-f 十六进制中,逢十六进一,,,,,6c+4...个位上的c+4等用于12+4=16,满16进一,1+6=7,所以6c+4=70 所以上述的数组的地址都只相隔4 1个int类型的字节占4个字节 得出结论: 1.数组在内存中是连续存放的 2.随着数组下标的增长...sizeof(arr[0])是单个元素的长度,每个元素的长度都相等,两个相除就可以得到数组里面元素的个数了 int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10...,列不能省略 int date[][5] = {{1,2},{3,4},{5,6}}; 二位数组的使用 数组名是地址 c语言默认行和列默认从0开始的 int arr[3][5] = {1,2,3,4,5... int main() { //char arr[] = "abc"; //a b c \0 //0 1 2 3对应的下标,最右边的结尾c所对应的下标应该-1
自己实现C语言中的strstr函数,采用字符一个一个进行匹配,如果不等,则从下一个位置进行匹配。...*tsrc) { //tsrc已经到达\0位置,说明在dest中已经找到 子字符串,唯一找到字串的出口。 return flag;//返回找到子串的起始位置。 } if(!...tdest到达\0 而tsrc没有到达\0,没有找到 return NULL; } //走到这里,没有匹配成功,继续从下一位开始匹配整个子串 tdest++; } return NULL; } 上面这函数好理解...下面是改进后的方法。...i – strlen(tsrc); } return NULL; }2个函数都能实现一样的效果。
数组 1、数组的定义和使用 格式: 数据类型 数组名[元素个数] 元素个数,代表该数组有多少个相同数据类型的变量 下标 用来表示数组中的某一个元素 例如 int arr[10]; arr[1]代表数组的第二个元素...数组下标是从0开始的 到数组元素个数-1 数组下标越界:超出了数组元素个数的下标,如果操作越界数据会出现程序错误 1、乱码结果 2、报错 求出数组元素个数: int (size_t) unsigned...(数据类型)) 数组名+1(sizeof(数组名)) 练习:十只小猪称体重 定义一个数组 存储小猪体重 通过遍历找到最重的小猪 找到数组中数据最大值的下标 根据下标打印数据 练习: 找到小猪中第二重的...scores【10】【3】 求出每名学生的总成绩和平均成绩 求出班级的语文 数学 英语的平均成 语数外 【0】【0】 【0】【1】 【0】【2】 字符数组和字符串: 字符数组和字符串区别在于是否有字符串结束标志...中就是数字0 printf("%s", arr); //for (int i = 0; i < 10; i++) //{ // printf("%c", arr[i]); //}
→ int arr [3] ={1,2,3} 数组如果初始化了,可以不规定大小,数组会根据初始化的大小来确定大小 c,数组的类型 数组里的元素有分类型,数组也是有类型的,而数组算是一种自定义类型。...a,数组下标 C语言中,数组的下标是从0开始的,如果有n个元素,则第一个元素的下标为0,最后一个元素的下标为n-1 ,下面举例: 对于: int arr [5] = {1,2,3,4,5...}; 数组元素: 1 2 3 4 5 对应下标: 0 1 2 3 4 C语言中 [ ] 是“下标引用操作符” ,...比如:arr [5]; 就是访问下标为5的元素;arr [0];就是访问下标为0的元素(即第一个元素) b,输入与打印 当我们需要依次给数组输入数据时我们可以利用for循环和scanf函数,如: 输入:...+) { printf("%d",arr[i]); } c,储存 这里主要讲下数组的元素在内存中储存的特点: 我们先用一下代码来依次打印出一维数组里元素的地址: 得到: 由上述打印出的地址
数组的地址 int arr[5] 数组名是低一维元素的地址arr[0]的地址。而数组的地址是&arr。...+ 1); printf("%p\n", &a); printf("%p\n", &a + 1); } 结果: 0028FF28 0028FF34 0028FF28 0028FF2C...而&a+1的步长是整个数组的长度 指针数组 int *a[3] 。为什么这里是指针数组。[]的优先级高于* ,所以这是一个数组,而*修饰数组,所以是指针数组,数组的元素是整型的指针。...同样的方式,首先括号的优先级最高,所以*a是指针,而[]修饰*a ,所以是数组指针,一个指向3个元素的一维数组指针。...示例: typedef int arr[3]; int main() { arr b = {1, 2, 3}; int (*a)[3] = &b; arr *c = a;
3.1 数组下标 C语言规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后一个元素的下标是n-1,下标就相当于数组元素的编号,如下: int arr[10] = {1,2,3,4,5,6,7,8,9,10...}; 在C语言中数组的访问提供了一个操作符 [] ,这个操作符叫:下标引用操作符。...所以我们得出结论:数组在内存中是连续存放的。 5. sizeof计算数组元素个数 在遍历数组的时候,我们经常想知道数组的元素个数,那C语言中有办法使用程序计算数组元素个数吗?...sizeof 中C语言是一个关键字,是可以计算类型或者变量大小的,其实 sizeof 也可以计算数组的大小。...C99中的变长数组 在C99标准之前,C语言在创建数组的时候,数大小的指定只能使用常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小。
数组介绍 C语言的数组是一个同类型数据的集合,主要用来存储一堆同类型的数据。 程序里怎么区分是数组?[ ] 这个括号是数组专用的符号. 定义数组、 访问数组数据都会用到。...访问数组成员的时候:下标是从0开始的。int data[10]; 下标 (0~9) 2. 数组只是支持在定义的时候进行整体赋值。 3. 数组定义的时候,[]里只能填常量。...数组在定义之后就无法更改大小。 4. 数组的空间是连续的—内存。 5. 数组的名称就是数组空间的首地址。 6. 数组初始化时,如果没有赋值,那么数组空间里的数据是未知的---局部变量。 7....数组定义语法与注意事项 1. 数组的名称是数组元素的首地址。(数组的名字就是地址) 2. 数组只能在初始化的时候进行整体赋值。比如: int a[100]={10,20,30}; 3....数组定义的时候(C89), 数组的下标里的大小只能填常量。
字符数组 字符数组顾名思义就是数组的元素类型为字符型的数组。特殊之处在于它是数组元素为字符的数组。其定义的一般形式和注意事项与之前讲解的一般数组类似,只是其中的类型说明符是char。...}; for (i = 0; i < SIZE; i++) { printf("%c", arr[i]); } return 0; } 运行结果: 运行结果为“Hello...看看上面代码中定义的arr数组,其数组长度为20,而初始化的字符元素的个数为12,初始化的字符元素个数小于数组长度,编译器在编译过程中将后面没有初始化的数组元素赋值为‘\0’,这也正是打印输出中含有空字符的原因...='\0'; i++) { printf("%c", arr[i]); } return 0; } 运行结果: 这时的输出结果中就不含有任何空字符了,因为巧妙地使用了字符数组中的...= '\0'; i++) { printf("%c", arr[i]); } return 0; } 运行结果: 在对一维字符数组进行定义和初始化的过程中,可以不指定其长度。
领取专属 10元无门槛券
手把手带您无忧上云