你必须清楚的区分ted 存储的是1776,但*ted (前面加asterisk * ) 指的是地址1776中存储的数值,即25。注意加或不加星号*的不同(下面代码中注释显示了如何读这两个不同的表达式): beth = ted; // beth 等于 ted ( 1776 ) beth = *ted; // beth 等于 ted 所指向的数值 ( 25 ) 地址或反引用操作符Operator of address or dereference (&) 它被用作一个变量前缀,可以被翻译为“…的地址”("address of"),因此:&variable1 可以被读作 variable1的地址("address of variable1" )。 引用操作符Operator of reference (*) 它表示要取的是表达式所表示的地址指向的内容。它可以被翻译为“…指向的数值” ("value pointed by")。 * mypointer 可以被读作 "mypointer指向的数值"。 继续使用上面开始的例子,看下面的代码: andy = 25; ted = &andy; 现在你应该可以清楚的看到以下等式全部成立: andy == 25 &andy == 1776 ted == 1776 *ted == 25 第一个表达式很容易理解,因为我们有赋值语句andy=25;。第二个表达式使用了地址(或反引用)操作符(&) 来返回变量andy的地址,即 1776。第三个表达式很明显成立,因为第二个表达式为真,而我们给ted赋值的语句为ted = &andy;。第四个表达式使用了引用操作符 (*),相当于ted指向的地址中存储的数值,即25。 由此你也可以推断出,只要ted 所指向的地址中存储的数值不变,以下表达式也为真: *ted == andy 声明指针型变量Declaring variables of type pointer 由于指针可以直接引用它所指向的数值,因此有必要在声明指针的时候指明它所指向的数据类型。指向一个整型int或浮点型float数据的指针与指向一个字符型char数据的指针并不相同。 因此,声明指针的格式如下: type * pointer_name; 这里,type 是指针所指向的数据的类型,而不是指针自己的类型。例如: int * number; char * character; float * greatnumber; 它们是3个指针的声明,每一个指针指向一种不同数据类型。这三个指针本身其实在内存中占用同样大小的内存空间(指针的大小取决于不同的操作系统),但它们所指向的数据是不同的类型,并占用不同大小的内存空间,一个是整型int,一个是字符型char ,还有一个是浮点型float。 需要强调的一点是,在指针声明时的星号asterisk (*) 仅表示这里声明的是一个指针,不要把它和前面我们用过的引用操作符混淆,虽然那也是写成一个星号 (*)。它们只是用同一符号表示的两个不同任务。
为了让你了解在同一个程序中一个指针可以被用作不同的数值,我们在这个程序中用value2 和同一个指针重复了上面的过程。 下面是一个更复杂一些的例子:
|