如何&a是一个指针,如果它生成一个?的地址?

use*_*958 4 c pointers memory-address

我是编程新手,目前我正在学习C中的指针.

  1. 我知道指针是包含或保存另一个变量的地址的变量.今天当我用K&R更多地了解它时,我感到很困惑,在第80页的给定函数交换(&a,&b)中,"&a是指向a的指针".如何&a是指针?它不是变量,而是变量的地址.我对吗?
  2. 我知道参数可以通过两种方式传递给函数:按值调用和按引用调用.参数的调用者值在第一个中没有改变,但可以在第二个中改变.

我的问题是我已经读过,如果我们想要改变变量的值,我们必须将指针传递给它(即我们想要修改的值的位置).这是什么意思?我的意思是,我们必须传递指向函数的指针吗?声明的含义是什么,"我们必须将指针传递给我们想要修改的位置".

Jos*_*lor 8

指针不是变量.指针是一个.

C中的变量指定存储位置,并且值可以存储在该位置.因此,如果您有一个a声明的变量int a,那么它a是一个可以存储整数值的变量.如果你有一个变量int *x,那么它x是一个变量,其中可以存储指向整数值的指针.

可以使用&操作员获得存储位置的地址.例如,&a是由指定的存储单元的地址a,或地址a,并且可以被存储在(除其他外)的相应类型的变量.因此你可以:

int  a = 42;  /* a is a variable of type int,  and has value 42 */
int* x = &a;  /* x is a variable of type int*, and has value &a */
Run Code Online (Sandbox Code Playgroud)

虽然编程中的类比通常很危险,但您可能会想到书中的页码等内容.页面的页码与页面不同,但页面编号仍然可以写在页面上.例如,目录页面上写有许多页码.从而:

actual_page p = ...; /* a page structure */
page_number n = &p;  /* a page number    */
Run Code Online (Sandbox Code Playgroud)