声明:本篇文章只是个人知识盲区、知识弱点、重点部分的归纳总结,望各位大佬不喜勿喷。梳理顺序是按照书籍的实际顺序梳理,转载请注明出处。
作者:sumjess
目前内容:第八、九、十、十一章总结
1、数组和指针基本组合:
2、给指针变量赋“空”值:
int *p=NULL;
NULL的代码值为0,指针p叫做空指针;
3、&和*优先级:
&和*优先级一致,所以j=*(&i)与j=*&i一致;
4、指针的比较:
若两个指针指向同一数组的元素,则可以进行比较。指向前面的元素的指针变量“小于”指向后面的元素的指针变量。附加一下,若两个指针指向同一数组的元素,,则两个指针变量的值之差是两个指针之间的元素。
5、通过传送地址值在被调用函数中直接改变调用函数中的变量的值:
6、函数、指针和数组:
7、指针操作
8、二维数组的定义:
①int a[2][2]={ {1,2},{3} }; //会发现a[1][1]未被定义,未被定义的则为0;
②int a[4][3]={ {1,2},{4,5} }; //系统自动给后面各行的元素补初值0;
③int a[4][3]={1,2,4,5}; //一行一行按顺序赋值,那么四位数只能赋值到第二行第一个元素;
④int a[ ][3]={ {1,2,3,4},{4,5},{6,7} }; //第一维大小由所赋初值的行数来决定;
⑤int a[][3]={1,2,3,4,5,6}; //第一位的原则是,在满足每行尽可能都是3个元素的情况下尽可能的大;
9、a[i][j]的地址可用以下五种表达式求得:
①&a[i][j]
②a[i]+j
③*(a+i)+j
④&a[0][0]+4 * i+j
⑤a[0]+4 * i+j
10、a数组元素可用以下五种表达式来引用:
①a[i][j]
②*(a[i]+j)
③*(*(a+i)+j)
④(*(a+i))[j]
⑤*(&a[0][0]+4*i+j)
#include
#define M 5
#define N 3
main()
{
double s[M][N];
....
fun(s);
....
}
//则fun函数的首部可以是以下三种之一
fun(double (*a)[N])
fun(double a[][N])
fun(double a[M][N])
12、指针数组作为实参时实参和形参之间的数据传递:
#include
#define M 5
#define N 3
main()
{
double s[M][N].*ps[M];
.....
for(i=0;i
13、通过赋初值的方式给一维字符数组赋字符串:
char str1[]={ 's','t','r','i','n','g','!','\0' }; //定义字符数组
char str2[]={ 's','t','r','i','n','g','!' }; //字符串
char str3[]={"string!"}; //字符串
char str4[]="string!"; //字符串
14、使指针指向一个字符串:
(1)通过赋初值的方式使指针指向一个字符串:
char *ps1="form one";
char str[ ]= "form two",*ps2=str;
注意:不要误以为是将字符串赋值给了ps1,使ps1和ps2指向了字符串的第一个字符f;
(2)通过赋值运算使指针指向一个字符串:
如果已经定义了一个字符型指针,可以通过赋值运算将某个字符串的起始地址赋给它,从而使其指向一个具体的字符串。
char *ps1;
ps1=“”form one“;”
这里也是将存放字符串常量的首地址赋给了ps1。又如:
char str[]="form two",*ps2;
ps2=str; /*此语句等价于 ps2 = &str[0];*/
通过赋值语句使指针ps2指向了存放字符串的字符数组str的首地址。
(3)用字符串数组作为字符串和用指针指向的字符串之间的区别:
(4)gets终端输入:
(5)puts终端输出:
15、用于字符串处理的函数:
(1)字符串复制函数 strcpy(s1,s2) 把s2所指字符串内容复制到s1;
(2)字符串连接函数strcat(s1,s2) 把s2所指字符串内容连接到s1所指字符串的后面;
(3)求字符串长度函数 strlen(s) 此函数计算出以s为起始地址的字符串长度,并作为函数值返回。这一长度不包括结束标志'\0'.
(4)字符串比较函数strcmp(s1,s2) 比较s1s2所指字符串大小,若s1大于s2为正,相等为零,其他为负;注:对应位置一个一个进行比较,比较的是ASCII码值;
16、指针和数组:
(1)复习:
(2)传给main函数的参数
若以下程序放在myc.c文件中,在编译连接后,生成一个myc.exe文件,输出argc和argv中的数据。
#include
main(int argc,char *argv[ ]) //main(int argc,* *argv)与前面一样
{
int i;
printf("argc=%d\n",argc);
for(i=1;i
若在命令行中输入:
myc A COMMAND LINE
程序将输出:
argc = 4 //表示在argc中存入了命令行中字符串的个数
A COMMAND LINE
17、指向函数指针变量的定义: