全国计算机等级考试二级教程--C语言程序设计(2018年版) 随手笔记(四)

声明:本篇文章只是个人知识盲区、知识弱点、重点部分的归纳总结,望各位大佬不喜勿喷。梳理顺序是按照书籍的实际顺序梳理,转载请注明出处。

作者: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)

11、二维数组名作为市参事实参和形参之间的数据传递:
#include <stdio.h>
#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 <stdio.h>
#define M 5
#define N 3

main()
{
   double s[M][N].*ps[M];
        .....
   for(i=0;i<M;i++)
      ps[i]=s[i];
   fun(ps);
        .....
}
//则fun函数首部可以是以下三种形式之一
fun(double *a[M])
fun(double *a[ ])
fun(double **a)

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 <stdio.h>                                      
main(int argc,char *argv[ ])     //main(int argc,* *argv)与前面一样
{
  int i;
  printf("argc=%d\n",argc);
  for(i=1;i<argc;i++)
     printf("%s",argv[i])
  printf("\n");
}

            若在命令行中输入:

            myc     A     COMMAND     LINE<CR>(此处<CR>表示Enter键)

            程序将输出:

             argc = 4 //表示在argc中存入了命令行中字符串的个数

             A     COMMAND     LINE

17、指向函数指针变量的定义:




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值