第五章 指针与数组

5.2 指针与函数参数

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int getch(void);
void ungetch(int);

/*getint 函数:将输入中的下一个整型数赋值给*pn */
int getint(int* pn)
{
    int c, sign;

    while (isspace(c = getch())) /*跳过空白符*/
        ;
    if (!isdigit(c) && c != EOF && c != ‘+‘ && c != ‘-‘) {
        ungetch(c); /*输入不是一个数字 */
        return 0;
    }
    sign = (c == ‘-‘) ? -1 : 1;
    if (c == ‘+‘ || c == ‘-‘)
        c = getch();
    for (*pn = 0; isdigit(c); c = getch())
        * pn = 10 * *pn + (c - ‘0‘);
    *pn *= sign;
    if (c != EOF)
        ungetch(c);
    return c;
}

#define BUFSIZE 100

char buf[BUFSIZE];
int bufp = 0;

int getch(void)
{
    return (bufp > 0) ? buf[--bufp] : getchar();
}

void ungetch(int c)
{
    if (bufp >= BUFSIZE)
        printf("ungetch: too many characters\n");
    else
        buf[bufp++] = c;
}

int main()
{
    int n, array[10];
    for (n = 0; n < 10 && getint(&array[n]) != EOF; n++)
        ;
    for (n = 0; n < 10; n++)
        printf("%d\n", array[n]);
    return 0;
}
时间: 2024-08-03 23:47:33

第五章 指针与数组的相关文章

K&amp;R——第五章 指针与数组

#include <stdio.h> #define maxsize 5000 char buf[maxsize]; char *head = buf; char *new(int size) { //分配元素字长 //可用内存分配完毕 if (maxsize - (buf - head) < size) return 0; head += size; return head - size; } int *arr; int *arr2; char *str; int main() { a

&lt;深入理解C指针&gt;学习笔记和总结 第四章 指针和数组

数组是一个什么玩意: 数组和指针我的理解,有相同之处也有不同之处.因有相同之处,因此一些资料上说,数组和指针本质是相同的.因有不同之处,因此也有一些资料上说,数组和指针是不一样的. 相同之处: 数组名字和指针名字都代表了一个地址. 如:int num[10];num是数组名.函数开辟了一个存储十个整数类型的空间,而num是他们的首地址. int *p; p=(int *)malloc(10*sizeof(int));类似的,p也指向了首地址. 不同之处是,num[10]中的空间位置是在栈中,而

《C程序设计语言(第2版&#183;新版)》第5章 指针与数组

指针:保存变量地址的变量:在 C中应用广泛,因为1)指针往往是表达某个计算的唯一途径:2)使用指针往往可以写出更高效紧凑的代码:另一方面,1)指针和goto一样,会导致程序难以理解:2)粗心会很容易导致指针指向了错误的地方: 指针与数组关系密切: ANSI C明确制定了操纵指针的规则,并且使用void*代替char*作为通用指针的类型: 5.1 指针与地址 内存的组织:一系列连续编号或编址的存储单元,单元可以单个操纵也可以以连续成组的方式操纵:通常1个字节可以存放一个char,2个相邻字节可以存

第五章 指针(一)

C语言的强大和良好的自由性绝大部分体现在指针的灵活运用上,指针可以说是C语言的灵魂. 一.不同类型指针之间的区别和联系 1.不同类型的指针 指针变量占用内存的大小与 它本身的类型无关,而是由使用的计算机决定的.但是不同类型的指针之间也是有区别的,因为不同类型的指针变量所指向内存区域的大小并不相同.“指针就是地址,地址就是指针”这种说法并不准确,忽略了类型的作用,指针应该是:地址+类型. 2.普通指针和数组指针 1 int index; 2 char a[4] = {'a','b','c','d'

第五章:1.数组和广义表 -- 数组

前言: 2.3.4章讨论的线性结构中的数据元素都是非结构的原子类型,元素的值是不再分解的.本章讨论的两种数据结构---数组和广义表可以看成是线性表在下述含以上的扩展:表中的数据元素本身也是一个数据结构. 其中.数组是一种比较熟知的数据类型,几乎所有程序语言都把数组类型设定为固有类型,前两节节以抽象数据类型的形式讨论数组的定义和实现,使读者加深对数组的理解. 目录: 1.数组的定义 2.数组的顺序表示和实现 3.矩阵的压缩存储 4.广义表的定义 5.广义表的存储结构 6.m元多项式的表示 7.广义

The C++ Programming Language 学习笔记 第5章 指针、数组和结构

1.关于输出指向字符的指针的值. 现在定义,char c='a',char* pc=&c.在C中,输出该值只需要printf("%p\n",pc);而在C++中,如果cout<<pc<<endl;则会出现奇怪的一串字符,怎么回事呢.由于C++标准库中I/)类对<<操作符重载,因此在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串.所以我们可以将其先转化为void*,再输出. cout << static_cast&l

《深入理解C指针》第四章 指针和数组

2019-12-01 19:07:20 原文地址:https://www.cnblogs.com/JasonPeng1/p/11967221.html

C和指针 (pointers on C)——第十五章:输入输出函数

第十五章 输入输出函数 这一章读完的第一感觉就是"呵呵". 如果说上过C语言课,基本上scanf()/printf()算是用的比较熟练了.尤其是那些抽象的格式说明.还有scanf()为什么要加括号. 读过本书前面的内容的话,getchar(),putchar(),gets(),puts()这些应该也问题不大. 再如果的话,你学过计算机图形学,你玩过OpenGL,听说过双缓存机制,那么fflush()也肯定弄明白了. 再加上FILE的操作,输入输出定位刷新删除改名,流的概念. 这一章就会

C和指针 (pointers on C)——第五章:操作符和表达式

第五章 操作符和表达式 这一章如果没做过玩过单片机.汇编的话,读起来可能比较吃力,尤其是在移位运算符.位运算符应用上.另外多注意一下左值和右值的理解. 总结: 算术操作符.赋值操作符.关系操作符.条件操作符. 短路求值(short-circuited evalution):如||这样的二目操作符,如果它的左操作数是真,右操作数便不再求值.带来的后果是如果右操作数的数组下标不合法,那么也不会报错. C并不具备显式得布尔类型,布尔值是用整型表达式来表示的.在表达式中混用布尔值和任意的整型值可能会产生