C和指针——读书笔记(一)

本科的时候学过C语言,知识基础真是薄弱。最近被指针折磨的痛不欲生,在实验室翻出一本《C和指针》,翻出来读,第一章就觉得受益匪浅,于是决定写一些读书笔记,记下自己疑惑的地方。

C语言中基本的输入输出函数有:

putchar ():把变量中的一个字符常量输出到显示器屏幕上;
getchar ();从键盘上输入一个字符常量,此常量就是该函数的值;
printf ();把键盘中的各类数据,加以格式控制输出到显示器屏幕上;
scanf ();从键盘上输入各类数据,并存放到程序变量中;
puts ():把数组变量中的一个字符串常量输出到显示器屏幕上;
gets ():从键盘上输入一个字符串常量并放到程序的数组中.
sscanf(); 从一个字符串中提取各类数据。

这篇文章主要谈puts函数、gets函数、putchar函数、getchar函数、scanf函数、printf函数。
首先这些函数都包含在stdio.h头文件里。

一.gets函数和puts函数

顾名思义,get string,获得一串字符串。

gets函数从标准输入读取一行字符串并把它存储于作为参数传递给它的数组。一行输入由一串字符组成,以一个换行符结尾。gets函数丢弃换行符,并在该行的末尾存储一个NUL字节。(一个NUL字节是指字节模式为全0的字节,类似‘\0’ 这样的字符常量).然后gets函数返回一个非NULL值,表示该行已经被成功读取。

puts函数是gets函数的输出版本,把指定的字符串写到标准输出并在末尾添上一个换行符。

    char input[10];
    printf("please input!\n");
    gets(input);
    puts(input);

1
同样在程序运行截图中可以看出,我在printf末尾加了一个换行符,才回换行,说明printf函数不会自动换行。(当年华为机试被这个坑惨了………)

二.getchar函数和putchar函数

顾名思义,get char ,获得一个字符

getchar函数从标准输入读取一个字符并且返回它的值。如果输入中不存在任何字符,则函数就会返回常量EOF(在stdio.h中定义),用于提示文件的结尾。

这个函数通常用来统计一段输入中某些字符的个数.《The_C_Programming_Language》这本书第一章就用到这个函数。此处,我写一个小小的程序,类似C程序设计语言中的程序,实现统计一点输入中“* & % $”的个数。

    int ch;
    int j,k,m,n;
    j = 0;k = 0; m = 0; n = 0; 
    printf("please input!\n");

    while (ch != EOF)
    {
        ch =getchar();
        switch (ch){
        case '*':
            j++;
            break;
        case '&':
            k++;
            break;
        case '%':
            m++;
            break;
        case '$':
            n++;
            break;
        default:
            break;

        }


    }
    printf("%d %d %d %d",j,k,m,n);

如果细心的朋友会发现我将ch声明为int型,用来读取字符。我在读《The C Programming_Language》时也不理解,在读《C和指针》时得到答案。EOF是一个整型值,它的位数比字符型要多,把ch声明为整型可以防止从输入读取的字符被意外的解释为EOF。但同时,这也意味着接收字符的ch必须足够大,足以容纳EOF,这就是ch使用整型值的原因。

putchar输出一个字符,此处不多讲。

三.scanf函数和printf函数

scanf函数和printf函数我们平时用的最多,也是最有用的。

格式化输入输出就不再多说,自行百度,说一下,字符串的输入。能进行字符,字符串输入的有:
getchar(), scanf(“%c”); scanf(“%s”), gets();
结合我上面说的,可以看出getchar(), scanf(“%c”),作用一样; scanf(“%s”)和 gets()作用一样。

getchar() 和 scanf(“%c”)
需要注意的是,这两个函数读入的是输入流中当前位置的字符,
比如:
scanf(“%d”,&n);
c = getchar();
假设输入 67/ (假设“/”代表回车),则第一个scanf读入一个整数67后,当前输入流的位置是67之后,即指向回车符,所以第二个getchar()读入的就是一个回车符了,即 c = ‘\n’。

同样,gets()也是从当前位置读入一行字符串。
比如:
scanf(“%d”,&n);
gets(str);
此时读入字符数组中的字符串就是“\n” 了
所以通常在用scanf读入一个非字符串的类型之后,如果要读入字符,或字符数组,都用一个额外的getchar()把回车符读掉,若后面跟的不止一个回车符,可能还有多余的空格的话,就用gets()读掉。

和以上不同的是,scanf(“%s”) 读入的时候是会忽略掉空格,回车和制表符的。并且以空格,回车和制表符作为字符串结束的标志。如果要读入一个带空格符的字符串时因该用gets(), 而不宜用scanf()!

sscanf函数比较复杂,需要单独分析。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
指针是C编程语言中非常重要的概念之一,对于初学者来说可能会感到害怕和困惑。但只要理解了指针的原理和用法,就会发现它其实并不可怕。 首先,指针是一个存储变量地址的变量,它可以指向任何数据类型的变量,包括整型、浮点型、字符型等等。我们可以通过指针访问变量的值,也可以通过指针修改变量的值,这是指针的一大优势。 其次,理解指针的应用场景能够帮助我们更好地使用它。比如,当我们需要在函数之间传递大量的数据时,通过传递指针可以提高程序的执行效率。另外,在动态内存分配和释放中,指针也是一个必不可少的工具。 理解指针的用法也是很重要的。首先,我们需要理解指针的声明和初始化。指针的声明使用“类型 * 变量名”的语法,例如 int *ptr; 表示声明了一个指向整型变量的指针指针的初始化可以通过给指针赋值一个变量的地址或者通过取地址符&获取变量的地址。 然后,我们需要了解指针的运算。指针可以进行四种基本的运算:取地址运算符&,取值运算符*,指针加法和指针减法。取地址运算符&用于获取变量的地址,取值运算符*用于获取指针所指向的变量的值。指针加法和指针减法用于指针地址的增加和减少,不同数据类型的指针相加或相减会有不同的结果。 最后,我们需要注意指针的安全性。在使用指针的过程中,需要特别小心避免空指针、野指针等问题的出现,因为这些问题容易引发程序的崩溃或者产生不可预知的结果。 总结来说,指针作为C语言中的重要概念,我们应该尽早学习和掌握。只要理解指针的原理和用法,我们就能够更加灵活地操作内存,提高程序的效率和功能。通过不断的实践和学习,我们可以逐渐摆脱对指针的恐惧,让指针成为我们编程的得力助手。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值