这些C函数有何不同?

时间:2014-08-03 14:23:22

标签: c pointers

我是C的新手并试图理解C的指针概念。任何人都可以帮助我,这些功能有何不同?

#include<stdio.h>

func1(int *p){
    printf("%d",*p);
}

func2(int *p){
    printf("%d",*p);
}

func3(int *p){
    printf("%d",*p);
}

void main(){
    int p=3;
    func1(&p);
    func2(*p);
    func3(p); 
}

2 个答案:

答案 0 :(得分:2)

3个功能是相同的。不同之处在于你传递给他们的论点。

&amp; p :获取变量p的引用(内存地址)。

* p :假设p是内存地址并获取存储在该位置的值。在这种情况下,您将获得一个sigsev,因为您正在尝试访问内存系统的第3位。

p :获取p,在这种情况下为3。

函数接收指针,并将该位置的值存储打印为整数。

答案 1 :(得分:0)

这三个函数期望指向int的指针。在第一次通话中,你只提供这样的指针。

&p是指向int的指针。

*pint的(非法)解除引用。

p是普通的int