我打算让我的指针打印该值,但它只是停止工作(没有来自MinGW的错误报告)。 。
#include<stdio.h>
void point_here(int *yolo) {
int you = 2014;
yolo = &you;
}
main () {
int *punk = NULL;
point_here(punk);
printf("Punk @ %d is not dead\w/.\n", *punk);
}
如何使这项工作?为什么这不起作用?请解释。我是指针和C的新手,在读完东西后仍然感到困惑。
答案 0 :(得分:0)
C是“按值调用”;函数获取调用者值的副本,而不是对它们的引用。如果更改函数内部的参数,则调用者的上下文中不会发生任何事情。
要解决这个问题,你需要使用显式指针,但即使你仍然没有一个指向函数内局部变量的指针,该指针超出了该函数的运行范围。
答案 1 :(得分:0)
你将NULL
作为一个参数传递给一个实际上没有任何东西的函数。然后你尝试取消引用那个非法的NULL指针。
答案 2 :(得分:0)
您修改后的代码版本效果很好:
#include <stdio.h>
void point_here(int *yolo) {
*yolo = 2014;
}
int main () {
int value = 0;
int *punk = &value;
point_here(punk);
printf("Punk @ %d is not dead\w/.\n", *punk);
return 0;
}
正如其他人所说,您有以下问题:
我通过传入已经分配的指针修复了这两个问题,然后你只需在函数中修改它。这是使用指针的一种标准方法。祝你好运!
答案 3 :(得分:-1)
有两个问题。首先,指针变量是按值传递的,其次是变量“you”在堆栈上,一旦函数返回就会丢失。
将变量更改为静态,如
static int you = 2014;
并将参数更改为** yolo;