我如何确保理解C指针?

时间:2011-07-24 00:08:08

标签: c pointers

没有任何导师,在网上自学自己的书籍和参考资料,我如何确保我正确理解C中的指针?我应该接受哪些测试,要回答哪些问题?

10 个答案:

答案 0 :(得分:14)

尝试在Stack Overflow上回答关于指针的问题。通过这种方式,如果您对指针的理解正确或者其他人不同意您回答这些问题的方式,您会很快发现。

答案 1 :(得分:2)

在K& R中,你可以解决一些练习,看看你是否做对了。此外,您可以查找来自各大学(而不仅仅是大学)C编程课程的解决方案,并解决它们(然后与解决方案进行比较)。

答案 2 :(得分:2)

你还需要malloc和structs:

  • 实施单链接和双链接列表。
  • 实施二叉树。
  • 使用您选择的某种方式从stdlib重新实现qsort接口。 (采用任意长度的数组,任意大小的参数和指向作用于它们的函数的指针)
  • 实现堆栈ADT。 (结构和指针)你需要知道malloc和结构。

stack.h

typedef struct stack *Stack;

// returns a Stack (struct stack*) for the other functions to use.
Stack createStack();

// put an item on the stack.
void push(Stack s, int value);

// remove an item from the top of the stack and return it.
int pop(Stack s);

// returns 0 if items are on the stack, non-zero otherwise
int isEmpty(Stack s);

// no memory leaks.
void destroyStack(Stack s);

答案 3 :(得分:1)

ThisThis之类的测试将为您提供语法知识,但正确使用指针需要的不仅仅是语法理解。需要专业知识只有时间会给你。

我建议你练习。实现内存管理器(开头简单)然后查找开源项目,看看它们如何处理指针管理。

我喜欢this解释,非常简单。

我在麻省理工学院看到的所有课程THIS ONE都是非常现实的,并且开放加免费(

答案 4 :(得分:1)

解释为什么这段代码适用于某些系统而不适用于其他系统,以及它是否有效的条件。

int next_arg(va_list *ap)
{
    return va_arg(*ap, int);
}

int vsum(va_list ap)
{
    int x, y;
    for (x=0; y=next_arg(&ap); x+=y);
    return x;
}

int sum(int dummy, ...)
{
    int x;
    va_list ap;
    va_start(ap, dummy);
    x = vsum(ap);
    va_end(ap);
    return x;
}

提示:如果它将失败,那将是一个编译时错误。

答案 5 :(得分:0)

我认为没有直接的答案。

只需编写一堆测试代码来处理指针并验证一切是否按预期工作。如果不确定,请使用调试器。

答案 6 :(得分:0)

尝试指针跟踪。例如,问题2 from heresolutions)。

这在技术上是用C ++编写的,但问题的所有指针部分都在C中。

答案 7 :(得分:0)

一些“面包和黄油”使用你需要理解的指针:

  • 代表一组数据。
  • 指向数组的特定元素(用于枚举)。
  • 将数据引用传递给函数,以便函数可以更改原始变量。
  • 访问动态分配的内存(malloc for C或new for C ++)

答案 8 :(得分:0)

理解指针的一个关键是理解底层的计算机体系结构。汇编语言是什么以及它是如何工作的。基本处理器如何处理指令。堆栈和堆是什么。调用堆栈的工作原理。内存分配如何工作。

答案 9 :(得分:0)

尝试向不是程序员的人解释。如果你能解释这些指针,那你就明白了。如果你对它的解释感到困惑,你还没有得到它。