c语言中int(*t) n,C语言基础知识(下)

函数

相当于功能模块,通过调用函数,能直接实现函数的功能

函数定义: 返回值类型 函数名(参数){

函数体

}

作用: 避免写大量的重复代码

能够使代码更加精简

四种形式:

无参无返回值

void name ();

无参有返回值

int name ();

有参无返回值

int name (int a,int b);

有参有返回值

返回值类型: 无返回值类型,写成 void

C语言中不能返回数组

如果有返回值,必须使用return返回

函数名: 命名规范和变量名一样,与返回值类型用空格隔开

参数: 放在与函数名紧挨着的括号内,括号内可以有多个参数,每个参数都要指定数据类型,不管数据类型是否相同

return: 返回指定的数据类型,由函数的返回值类型决定什么类型的数据

碰到return,函数执行结束,return后面的代码不再执行

// 不能在函数里面调用函数

函数调用: 当函数定义在调用处的下面时,需要函数声明(函数声明:将函数的大括号变成分号,放在调用处所在函数的上面  void printfHelloWorld();)

函数定义在调用处所在函数的上面时,不需要函数声明

* 1. 建文件 点击你想放的位置->Command+N->OS X->Source->C file

* 2. 在.h 里面声明一个函数, .c 实现这个函数

* 3. 该文件内导入该文件的头文件,也就是.h文件

* 4. 直接调用函数就行

函数的嵌套调用

/*

* s = (2*2)! + (3*3)! +(4*4)!

* 1、整型数的平方

* 2、一个整型数的阶乘

* 3、三个整形的平方的阶乘的和

*/

#includeint method2(int a)

{

int sum = 1;  // 用sum获取到a的阶乘

for (int i = 1; i<=a; i++)

{

sum *= i;

}

return sum;

}

int method1(int n){

int sum = 0; //sum接受最终的结果

for (int i = 2; i<=n; i++)

{

//    sum +=i*i;  (用一个函数计算阶乘)

sum += method2(i*i);  //通过method2获取到i值平方的阶乘,再通过sum累加i值平方的阶乘

}

return sum;

}

int main(){

int sum = method1(4);

printf("%d\n",sum);

}

递归函数

/*

本质:自己调用自己

5! (jiecheng(5))

5*4! (5*jiecheng(4))

4*3! (4*jiecheng(3))

3*2! (3*jiecheng(2))

2*1! (2*jiecheng(1))

#includeint jiecheng (int n){

if (n == 1)

{

return 1;

}

return n*jiecheng(n-1);

}

int main (){

printf("n的阶乘=%d\n",jiecheng(5));

}

结构体概念

结构体:也相当于一个容器,与数组的本质区别在于,数组只能存放一种数据类型,而结构体能够存放多种数据类型

结构体能够直接复制,可以通过结构体的这种特性,让数组直接赋值

利用结构体可以创造多种数据类型

结构体的声明

格式:struct 结构体名

{

属性类型 属性名1;

属性类型 属性名2;

...

属性类型 属性名n;

};

定义结构体变量

结构体名字 结构体变量 = 初值;

修改结构体变量的内容,通过给结构体变量.相应的属性来赋值或者取值

定义过的结构体变量,不能再通过大括号来赋值

结构体的优化

typedef 能够给数据类型重命名

格式:typedef type name

type:原数据类型的名字

name:重新给原数据类型设置的名字

结构体嵌套

typedef struct Brithday{  //创建一个学生体并重命名

int year;

int month;

int day;

}Brithday;

typedef struct Student{  //创建一个学生体并重命名

char name[20];

Brithday brithday; //结构体的嵌套,也可以不嵌套,用结构体Brithday的内容替换

}Student;

int main (){

Student pangrenmeng = {"pang",{1993,03,16}};

int month = pangrenmeng.brithday.month;

指针概念

1.计算机在内存中存放数据,首先需要为数据找到一块地址

2.每块地址都有一个编号,通过编号找到这块地址

3.地址的编号其实就是指针

4.指针指向的就是计算机磁盘内的一块地址

5.指针变量:就是用来存储地址的

格式:

数据类型 *变量名 = 赋初值;

'*'就是一个标志符:用来表明这个变量是指针变量

数据类型:用来指示变量所指向的地址,存放什么样的数据

赋初值:因为定义的是指针变量,所以赋初值时要给一个地址

'&'取地址符

格式:

&变量名

在变量名前加一个&,就代表取到了该变量所在的地址

取值运算符

取值格式:

*指针变量

在变量的前面一个*代表取出来改地址的值

使用指针来交换两个变量的值

int i = 3;

int e = 7;

int * r = &i;

int * t = &e;

int temp = 0;

temp = *r;

*r = *t;

*t = temp;

printf("i = %d\ne = %d\n",*r,*t);

int y = 7;

int x = 9;

int * s= &y;

int * z= &x;

int temp1 = 0;

temp1 = *s;

*s = *z;

*z = temp1;

printf("y = %d\nx = %d\n",*s,*z);

指针与数组

数组: 定义一个数组,系统会分配一块连续的内存空间,数组名就是该数组里面第一个元素的地址

数组名就是一块地址

char *strings[3] = {"iPhone" , "Android" ,"win8"};

printf("%c\n%s\n%s\n",*(strings[1]+1),*(strings+1),*(strings+2));

指针与字符

char string[] = "awfr2";

char test = *(string+1);

*string = test;

*(string+1) = 'q';

*(string+4) = 'q';

printf("%s\n",string);

结构体指针

// 定义一个英雄结构体

typedef struct Hero

{

char name[10];

int blood;

char sex;

}Hero;

int main() {

Hero gailun = {"gailun",350,'m'};   //定义一个Hero类型的指针

Hero *p = &gailun;  //读取Hero类型指针里面的数据

printf("%s的一级血量是%d\n",(*p).name,(*p).blood);

Hero datou ={"datou",300,'m'};

Hero *p1 = &datou;

printf("%s的一级血量是%d\n",(*p1).name,(*p1).blood);

结构体数组

int main(){

Hero gailun = {"gailun",350,'m'};

Hero aixi = {"aixi",300,'w'};

Hero ruizi = {"ruizi",500,'m'};

// 定义一个结构体数组

// 数组名代表的是数组的第一个元素的地址

Hero list[] = {gailun,aixi,ruizi};

//定义一个结构体指针,用来存放地址

Hero *hero = list;

printf("%s的血量%d\n",(*hero).name,(*hero).blood);

printf("%s的血量%d\n",(*(hero+1)).name,(*(hero+1)).blood);

printf("%s的血量%d\n",(*(hero+2)).name,(*(hero+2)).blood);

指针的指针

int main(){

//定义变量a 系统给地址

int a = 6;

//定义一个指针变量,系统还会给地址

int *p = &a;

//定义一个指针变量,来存储变量p的地址

int **pp = &p;

//通过双星找到指针的指针里面的值

printf("a=%d\n",**pp);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值