【问题标题】:How are these C functions different? [closed]这些 C 函数有何不同? [关闭]
【发布时间】:2014-08-03 14:23:22
【问题描述】:

我是 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); 
}

【问题讨论】:

  • 它们不是,就功能而言,也不是就可读性而言。
  • 功能似乎相同。你打错了吗?
  • (咳)函数都是一样的……但是你的编译器肯定会警告传递错误的参数吗?
  • 这段代码不应该编译。
  • 代码本身包含错误。请重新查看并编辑问题。

标签: c pointers


【解决方案1】:

这3个功能是一样的。不同之处在于您传递给他们的参数。

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

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

p:得到 p,在这种情况下为 3。

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

【讨论】:

    【解决方案2】:

    这三个函数需要一个指向int 的指针。在第一次调用中,您只提供这样一个指针。

    &amp;p 是指向int 的指针。

    *p 是对int 的(非法)取消引用。

    p 是一个普通的int

    【讨论】:

      猜你喜欢
      • 2014-02-08
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多