C语言基础与提高(1.一维数组 2.二维数组 3.字符数组 4.函数 5.预处理)
今日任务完成情况:
{ int a[3][4]={{1,2,3,4},{3,4,5,6},{5,6,7,8}};
int i;
int (*1p)[4]=a,*q=a[0];
for(i=0;i<3;i++)
{
if(i==0)
(*p)[i+i/2]=*q+1;
else
p++,++q;
}
for(i=0;i<3;i++)
{
printf("%d,",a[i][i]);
}
printf("%d,%d\n",*((int *)p),*q);
}
1.一维数组,二维数组如何定义,初始化?如何在程序中赋值?
如:int a[]={1,2,3,};
int b[2][3]={4,5,6,7,};
2.字符数组如何定义,初始化,如何程序中赋值?
如:char a[5]={'H','E','L','L','O',};
3.字符串常见函数的使用,不用函数如何实现字符串的复制,字符串长度的实现?
如果不用函数,可把字符串里的字符一个一个分别赋值给另一个数组来实现复制。
4.函数的构造有哪些?入参,返回值如何在函数中体现?形参,实参是如何传递数据?
函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。
5.值传递,地址传递是怎么回事?如何实现在子函数中数值交换后在主函数中能实现?
值传递方式方式:
函数调用时,为形参分配单元,并将实参的值复制到形参中;
调用结束,形参单元被释放,实参单元仍保留并维持原值;
特点:
形参与实参占用不同的内存单元; 单向传递
地址传递方式:
函数调用时,将数据的存储地址作为参数传递给形参
特点:
形参与实参占用同样的存储单元;
“双向”传递;
实参和形参必须是地址常量或变量;
6. Auto,register,extern,static关键字的使用,详细说明
自动变量是最常用的。 关键字auto能够显式地指定存储类别。
显式定义 auto int x,y;
隐含定义 等价 int x,y;
实际上关键字“auto”可以省略,auto不写则隐含确定为“自动存储类别”,即动态存储方式。
程序中大多数变量属于自动变量。
对于使用频繁的变量,可以使用register声明为寄存器变量,其值存储在CPU中,加快了运行速度。
如:
register int x;
register char c;
函数中的局部变量的值在函数调用结束后不消失而保留原值,以便下一次调用该函数时可以使用上一次调用的最后结果。这时就应该指定该局部变量为“静态局部变量”。
外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。
⑴在一个文件内声明外部变量
如果全局变量在后面定义,而在前面的函数中要使用,则必须在使用前用extern声明该全局变量。
如:extern int Abc;
7.文件的包含有几种?分别表示什么意思?
分为嵌套包含和集中包含。
功能:一个源文件可将另一个源文件的内容全部包含进来
一般形式: #include “文件名”
或 #include <文件名>
处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译
8.宏定义如何实现?撤销定义如何实现?
不带参数宏:
一般形式: #define 宏名 [宏体]
功能:用指定标识符(宏名)代替字符序列(宏体)
定义位置:任意(一般在函数外面)
作用域:从定义命令到文件结束
#undef可终止宏名作用域
格式: #undef 宏名
#define YES 1
#define NO 0
#define PI 3.1415926
#define OUT printf(“Hello,World”);
带参数宏:
一般形式: #define 宏名(参数表) 宏体
例 #define S(a,b) a*b………..
area=S(3,2);
宏展开: area=3*2;
宏展开:形参用实参换,其它字符保留
宏体及各形参外一般应加括号()
撤销定义:
#undef命令可以取消定义一个名称为宏:
#undef name
数组指针令人头大Zzzzzz
自我评价:有点乱
其他:无