面试问题指针篇

这两天比较闲,有时候会刷刷帖子,看见有很多人抱怨面试坑,刚好,我随便出几个题,也是我自己踩过的坑,那就先随便问几个吧,分享一下。

1.定义与声明问题

Q:我如果不能成功定义一个链表了,typedef struct { char *item; NODEPTR next; } *NODEPTR; 编译器报了错误信息。难道在C语言中一个结构不能包含指向自己的指针吗?如果可以,我应该怎么做?

A:C 语言中的结构当然可以包含指向自己的指针;  NODEPTR 例子的问题是在声明 next 域的时候 typedef 还没有定义。为了解决这个问题, 首先赋予这个结构一个标签 (“struct node”)。然后, 声明 “next” 域为 “struct node *”, 或者分开 typedef 定义和结构定义, 或者两者都 纳。以下是一个修改后的版本:

struct node {
char *item;
struct node *next;
};
typedef struct node *NODEPTR;

 在用 typedef 定义互相引用的两个结构时也会产生类似的问题, 可以用同样的方法解决。而且一样的问题至少还有三种方法能解决(可以自己想想)。

2.声明问题

Q:我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?

        char *p; *p = malloc(10);

A:你所声明的指针是 p, 而不是 *p, 当你操作指针本身时 (例如当你对其赋值, 使之指向别处时), 你只需要使用指针的名字即可: p = malloc(10); 当你操作指针指向的内存时, 你才需要使用 * 作为间接操作符: *p = ’H’;(这个比较经典,面试如果问到这个问题是必问的)

3.空指针

Q:臭名昭著的空指针到底是什么?

A:语言定义中说明, 每一种指针类型都有一个特殊值 —— “空指针” —— 它与 同类型的其它所有指针值都不相同, 它 “与任何对象或函数的指针值都不相等”。 也就是说, 取地址操作符 & 永远也不能得到空指针, 同样对 malloc() 的成功调用 也不会返回空指针, 如果失败, malloc() 的确返回空指针, 这是空指针的典型用法: 表示 “未分配” 或者 “尚未指向任何地方” 的指针。 空指针在概念上不同于未初始化的指针。空指针可以确保不指向任何对象或 函数; 而未初始化指针则可能指向任何地方。(这个也比较经典和基础,也是必须要知道掌握的)

4.绕来绕去的指针

Q:  a) 一个整型数

        b)一个指向整型数的指针

        c)一个指向指针的的指针,它指向的指针是指 向一个整型数

        d)一个有 10 个整型数的数组

        e) 一个有 10 个指针的数组,该指针是指向一 个整型数的。

        f) 一个指向有 10 个整型数数组的指针

        g) 一个指向函数的指针,该函数有一个整型 参数并返回一个整型数

        h) 一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

A:

        a) int a;

        b) int *a;

        c) int **a;

        d) int a[10];         

        e) int *a[10];

        f) int (*a)[10];

        g) int (*a)(int);

        h) int (*a[10])(int);

先更新这么多,后面还有不少,我整理整理发出来,有些问题感觉面试官自己应该也懵的,我看看有没有价值发出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值