C语言第五天笔记2016年01月18日(周一)A.M

1. 函数(补充,了解)

函数形参有默认值,必须自右向左依次有默认值

例:int  foo(int a,int b=1,int c=2){

return a+b+c;}//合法

int  foo(int a=1,int b,int c=2){

return a+b+c;}//不合法

内联函数:声明时使用inline关键字(并不一定所有的编译器都支持内联函数)。

内联函数:在编译之前,编译器会用函数体替换函数调用语句,执行时,省去了“寻找函数实现”的时间。是一种用空间换时间的操作

普通函数:程序运行时,编译器会根据函数名找到函数体

函数重载:(C++特性)

函数名相同,参数列表不同。参数列表不同分为两种情况,参数的个数不同,参数的类型不同。

2. 指针:

2.1 指针是什么?指针就是地址。

指针变量:存储的就是地址编号

整型变量:存储的是整数

2.2 声明指针

声明整型变量:int a;

声明指针变量:基类型* 变量名;

例:int* p; double** q;

基类型:指针所“指向”的变量类型int* p;

p所“指向”的基类型是int类型 q“指向”double*类型

“指向”:char aChar=’G’;

char* p; p=&aChar;//指针变量p中储存了aChar变量的地址编号,称指针p指向aChar。

3. 指针的使用

int a;

int* p=&a

int** qq=&p  //二级指针“指向”一级指针

打印地址:%p

打印长度:%lu sizeof()

初始化:

变量 p是左值表示空间    p是右值表示空间的值

例: int a; int* q; q=&a; //变量q初始化,所以左值为变量名q

int** qq; qq=&q;

*:

int* (数据类型*):*表示p是一个指针变量。

*p:解地址符

int a=10;

int* p =&a;

printf("%d %d\n",a,*p);// 10 10

*p=20;  //*p⇔*(&a)⇔a

printf("%d %d\n",a,*p);// 20 20

int* *q=&p;

printf("%d %d %d\n",a,*p,**q);// 20 20 20

//q=&p=&(&a);进行两次取值

return 0;

空指针:值为null的指针

时间: 2024-10-24 14:00:40

C语言第五天笔记2016年01月18日(周一)A.M的相关文章

C语言第五天笔记2016年01月18日(周一)P.M

1. 指针 int a=10; int *p; p=&a; *p=a;//p=&a;未添加之前 *p指针未初始化 printf("%d\n",*p); 同类型声明: int a, * p,** q;

C语言第七天笔记2016年01月21日(周四)P.M

1. 内存分配: C++里面使用new  delete 注意: #include <iostream> #include"stdlib.h" using namespace std; int main(int argc, char *argv[]) { int* p=new int(5); //申请了一个数组大小的堆空间,数组中的元素为int类型,元素个数为5. int* q=new int[5]; //申请了一个数组大小的堆空间,数组中的元素为int类型,元素个数为5.

C语言第三天笔记2016年01月14日(周四)P.M

1. 二维数组: 例:int a[5][6] :5行6列 在物理内存中存储时,以一位数组的形式存放. 注:初始化时行数可省,列不能空,数组名不可赋值 2. continue:结束本次循环  即直接返回至判断条件 while: 使用条件内的数字初始化数组元素. break:跳出整个循环 3. 函数:用来实现指定功能的代码模块. 函数返回值的个数最多有一个 函数声明:return-type function-name(argument declarations); 返回值类型 函数名(参数列表) 函

C语言第三天笔记2016年01月14日(周四)A.M

1. while循环:当型循环 先执行判断条件,循环体可能一次都不会执行 do-while循环:直到型循环 先执行循环体后判断条件,循环体至少会执行一次. 2. for循环: for (expr1; expr2; expr3) statement //循环体 expr1:初始化循环控制变量(可选) expr2:循环判断条件(可省)若省略判断条件永真,有可能导致死循环 expr3:修改循环控制变量(可省) 在循环结构中,必须有修改循环控制变量的操作. break:退出整个循环 练习:9*9乘法表

C++第五天笔记2016年02月22日(周一)P.M

1.    输出运算符重载: 1 #include <iostream> 2 #include"cstring" 3 4 using namespace std; 5 6 class Complex 7 { 8 public: 9 Complex(int r=0,int i=0):_r(r),_i(i){} 10 void print(); 11 friend ostream& operator<<(ostream& out,const Comp

C语言第六天笔记2016年01月19日(周二)A.M

1. 指针: 指针变量的值被修改,指针变量的指向也会被修改(指针变量存储了谁的地址,指针变量就指向谁). 2. 指针变量 特点: 可以用来存储地址 值可以变化(指向可以更改) “指向”特定类型的数据 多个指针变量可同时指向一个变量 int* p=(int )malloc(4);  // (堆空间)  释放 free(p) 野指针: int *p; //p指向不明确的指针. 空指针: 值为null的指针 //不能对空指针进行解地址 3. 内存5大分区:(根据处理机制不同) 栈区:由系统自动分配空间

C语言第八天笔记2016年01月22日(周五)A.M

1. 作用域: 静态全局变量与普通全局变量:前者的作用域缩小,生命周期相同. 静态局部变量与普通局部变量:前者的生命周期延长,作用域相同. 2. 函数指针: int (*func_ptr)(int,float*);//声明函数指针. int exchange(int,float*); exchange(1,p); func_ptr(1,p); 3. 数组指针.指针数组 指针数组:char* s[10]; int* a[10];(数组,数组中的元素都是指针类型). 数组指针: int* p;//整

C语言第九天笔记2016年01月25日(周一)P.M

1. 结构体 成员如果是char* name;能否使用gets.scanf.strcpy取决于name是否“指向”一块可以盛放字符串的空间,成员是数组,数组名不可以做左值. COMPUTER* p; p=&c; p->brandó(*p).brand .成员访问运算符 //结构体变量名.成员:c.brand; ->指向运算符:指针变量名->成员; //访问指针所“指向”的结构体变量的成员 2. 宏定义 基本格式:#define 宏的名字 宏替换内容 3. 预处理命令 #if 0

C++第二天笔记2016年01月27日(周三)P.M

1.  Point(Point p,int r):p(_p){} 对象p  p.print();//代码复用调用Point中的打印函数 2.  对象成员变量,没有显示使用初始化列表做初始化,编译器依旧会自动调用成员变量所属类中的构造函数(默认构造)对对象成员变量进行初始化. 3.  const: const修饰函数时,只能修饰类的成员函数. const成员函数体内 不能修改成员变量的值 const成员函数体内只能调用const成员函数 const对象只能调用const成员函数 4.  析构函数: