Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
既然可以直接指向变量作为指针,为什么还要在C中创建指针呢?_C_Pointers_Idioms - Fatal编程技术网

既然可以直接指向变量作为指针,为什么还要在C中创建指针呢?

既然可以直接指向变量作为指针,为什么还要在C中创建指针呢?,c,pointers,idioms,C,Pointers,Idioms,我正在学习C语言,遇到了一个例子,它似乎创建了一个不必要的步骤,但我对这一点还是新手 他创建了一个变量,然后创建了一个指向该变量的专用指针。我的理解是,您可以简单地在变量前面放一个*作为指向它的指针……那么为什么要使用另一行代码来创建指针呢?具体来说,我要说的是为什么他创建了指针*p只是为了引用x,而不是说*x来指向它。下面是示例代码: #include <stdio.h> int main() { int x; /* A normal integer

我正在学习C语言,遇到了一个例子,它似乎创建了一个不必要的步骤,但我对这一点还是新手

他创建了一个变量,然后创建了一个指向该变量的专用指针。我的理解是,您可以简单地在变量前面放一个*作为指向它的指针……那么为什么要使用另一行代码来创建指针呢?具体来说,我要说的是为什么他创建了指针*p只是为了引用x,而不是说*x来指向它。下面是示例代码:

#include <stdio.h>

int main()
{
    int x;            /* A normal integer*/
    int *p;           /* A pointer to an integer ("*p" is an integer, so p
                   must be a pointer to an integer) */
    p = &x;           /* Read it, "assign the address of x to p" */
    scanf( "%d", &x );          /* Put a value in x, we could also use p here */
    printf( "%d\n", *p ); /* Note the use of the * to get the value */
    getchar();
}

没错,您不需要额外的指针对象

您的程序在行为上等同于:

int x;
scanf("%d", &x);
printf("%d\n", x);
getchar();

在示例中使用额外指针可能是出于说教的原因:解释如何声明和使用指针。

请参阅此部分以了解更多详细信息,因为指针需要指向某个位置……是的,在printf中,您可以直接使用x而不是*p或*&x。我认为这段代码只是一个示例,说明如何使用指针。@Christophe以及在scanf中,OP可以执行scanf%d,p;。虽然这段代码可能是使用指针的一个很好的开始练习。在这种情况下,实际上不需要指针。。有很多情况下确实需要一个指针,所以现在是学习/理解它们的好时机。好吧,这就是我想的……它似乎不是强制性的,对我来说,它让我感觉代码到处都在跳,所以如果可能的话,这是我想在实践中避免的。