小编Ama*_*d27的帖子

在C中没有得到NULL指针错误

我故意试图在C中获取NULL指针,但我没有这样做.这是我编码的内容:

int main(void) {
  int x; //UNINITIALIZED so that it will represent "nothing"
  int *null_test = &x;
  printf("This should be null   %p \n", null_test);
}
Run Code Online (Sandbox Code Playgroud)

但它给了我一个地址:0x7fd96c300020这似乎NULL不像我希望的那样.

为什么?我甚至没有初始化x但仍然不是null?

c pointers

1
推荐指数
2
解决办法
165
查看次数

改变C中变量的值

为什么应该更改主变量的值而不是变量的副本。

我有一个方法

int plusInt(int x){
 return ++x; 
}
Run Code Online (Sandbox Code Playgroud)

调用此函数时,将创建一个新的堆栈帧,其中包含x 的副本而不是原始变量。那么这会改变该副本的价值吗?

问:如果我想更改原始变量的值,我可以使用指向它的指针,然后增加一个值,对吗?例如:

int plusIntPointer(int *x){
 return ++*x; 
}
Run Code Online (Sandbox Code Playgroud)

但是有什么用/为什么有人想要更改原始变量的值而不是副本?

c pointers

1
推荐指数
1
解决办法
1万
查看次数

C中的地址副本?

我知道这段代码:

void incVar(int i){
  i++; 
}
Run Code Online (Sandbox Code Playgroud)

我们知道这将创建整数的副本,然后增加该值,但不是实际值.

本质上:C中的方法在其堆栈帧中创建参数的副本,而不是原始变量.

但:

 void incVar(int *i){
      (*i)++; 
    }
Run Code Online (Sandbox Code Playgroud)

应该通过指针取消引用来增加整数的实际值.

但是,为什么C只是不创建指针的副本*i呢?如果这是常规整数的正常行为,那么为什么指针不会发生同样的事情呢?

c

0
推荐指数
1
解决办法
370
查看次数

标签 统计

c ×3

pointers ×2