2017-06-04 32 views
0

第一程序下面利用指针数组movie在这个特定的程序中使用指针的主要好处是什么?

#include <stdio.h> 

int main(void) { 
    char movie [20]; 
    char * pMovie = movie; 

    fgets(pMovie, 20, stdin); 
    puts(pMovie); 

    return 0; 
} 

虽然第二程序如下不利用任何指针,并且基本上实现相同的结果。我不理解,老师试图用指针内的指针来显示的好处,但我认为它超越了这个特殊的例子:

#include <stdio.h> 

int main(void) { 
    char movie [20]; 

    fgets(movie, 20, stdin); 
    puts(movie); 

    return 0; 
} 
+1

没有技术上的好处。这些程序是相同的。数组在这些上下文(即函数调用)中隐式转换为指向其第一个字符的指针。显式指针是不必要的。 – PSkocik

+0

老师向您展示宝贝步骤简单的用法。 –

+5

还有个好处(**时不使用**指针):'与fgets(电影,电影的sizeof,标准输入);'将避免在文字上的'20' – wildplasser

回答

-1

是绝对没有好处,因为这两个东西都很相似。在C中,数组可以被视为指向数组第一个元素的指针(在声明数组的函数的作用域内部,编译器也知道数组的大小,所以在数组之间存在一些不同的行为2,虽然不在你的例子中)。字符数组是一个指针数组中的第一个元素,请注意有是当他不无型铸造:

char * pMovie = movie; 

没有必要,因为这两个变量被认为是同一类的强制类型转换(char *)由编译器。

类似的方式来创建一个数组是:

char *test = (char*)malloc(sizeof(char)*size_of_array); 

我假设你的老师想让你熟悉这个概念(在C数组类似指针,反之亦然)

+0

给谁就给谁downvoted,请告诉我为什么,是什么做的依赖我做错了。停止这样做,帮助我改进:C – Makogan

+0

这不是我的倒票,而是你的第二句话“在C中,一个数组_is_指针”是错误的。除此之外,给定'int a [32]; int * b;'很明显sizeof(a)!= sizeof(b)',所以数组不是指针。另外,你可以执行'b = &a[0];'(给一个指针赋值),但是你不能'int c [20]; a = c;'(你不能指定给数组)。所以,虽然你的开头句是好的,准确的,但你的延续不是。在许多上下文中,数组名称会“衰减”成指向第一个(或第零个,取决于您如何计算)数组元素的指针,但不会将其指向指针。 –

+0

@Fredrik'是一样的'?如果你很快,你会错过一个可以编辑到评论中的单词。 –

相关问题