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);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 第1章 第一个C程序第2章 C语言基础第3章 变量和数据类型第4章 顺序结构程序设计第5章 条件结构程序设计第6章...
    小狮子365阅读 10,585评论 3 71
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,423评论 3 44
  • 一、框架 1、Mac系统及常用工具、进制;C数据类型、常量变量、运算符、表达式、格式化输入输出 2、关系运算符、逻...
    师景福阅读 675评论 0 1
  • C语言大总结 一、基础: 1、进制、位权、1字节等于8位(位是计算机的最小储存单位,字节是计算机最小存储单元)、十...
    雾中探雪阅读 2,815评论 1 36
  • “他过得好就好,不必让我知道,我过不好就不好 ,也不想他知道。” 这是前两天和夏夏见面的时候,聊起江楠,我说的话。...
    安在阅读 420评论 0 1