gpt4 book ai didi

c - 在 C 中打印一个 int

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:09 25 4
gpt4 key购买 nike

我试图在调用 set 函数之前和之后打印一个 int a 来设置 a 的值。我在 C 中执行此操作。当我编译它时没有错误,但是当我尝试运行它时,我遇到了段错误。

这是我目前所拥有的:

#include <stdio.h>

int main(){
int* a;
printf("%d",*a);
set(10);
printf("%d", *a);
return 0;
}

int set(int*a, int val){
*a = val;
return *a;
}

最佳答案

int main(){
int* a;
printf("%d",*a);

你所拥有的是一个指向 int 而不是实际的 int指针

虽然这是打印它指向的 int 的正确方法,但不幸的是它指向一个任意内存位置,这就是你崩溃的原因。

您不能解引用任意指针,它们必须指向有效的东西,例如如果您的代码以:

int main(){
int target_of_a = 42;
int *a = &target_of_a;
printf ("%d", *a);

此外,您可能应该调用 set,例如:

set (a, 10);

虽然编译器通常会警告您,但在这种情况下,它可能只是说在您调用它时它不知道 set。如果它知道,它可能会告诉您参数不匹配。

实现该目标的一种方法是确保在调用函数之前为其定义了一个原型(prototype):

int set(int*,int);

或者只是将函数移动到 main 之前。通过所有这些更改(以及一些一般性的整理),您最终会得到:

#include <stdio.h>

int set (int *a, int val) {
*a = val;
return *a;
}

int main (void) {
int target_of_a = 42;
int *a = &target_of_a;
printf ("%d\n", *a);
set (a, 10);
printf ("%d\n", *a);
return 0;
}

返回您正在更改的变量是否明智也值得商榷,但在某些情况下这可能会有用(例如,如果您想立即使用它而无需其他声明:例如 printf ("%d\n", set (a, 10));)所以我将其保留原样。

我还应该提到,在这种情况下人为创建指针变量有点不寻常。

现在您的代码可能只是一些您已经指针的更复杂场景的简化,但如果没有,通常的方法是只拥有 int本身,只需使用 & 即时创建一个:

#include <stdio.h>

int set (int *a, int val) {
*a = val;
return *a;
}

int main (void) {
int a = 42;
printf ("%d\n", a);
set (&a, 10);
printf ("%d\n", a);
return 0;
}

关于c - 在 C 中打印一个 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28079060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com