指针知识(二):指针初始化

 

当声明一个指针的时候我们可能需要同时指定它们指向哪个变量,如:

int number;
int *tommy = &number;

 

 

这相当于:

int number;
int *tommy;
tommy = &number;

 

 

 

当给一个指针赋值的时候,我们总是赋给它一个地址值,而不是它所指向数据的值。你必须考虑到在声明一个指针的时候,

星号 (*) 只是用来指明它是指针,而从不表示间接引用操作符dereference operator (*)。

记住,它们是两种不同操作,虽然它们写成同样的符号。因此,我们要注意不要将以上的代码与下面的代码混淆:

int number;
int *tommy;
*tommy = &number;

 

 

 

上面这一种是错的。

在定义数组指针的时候,编译器允许我们在声明变量指针的同时对数组进行初始化,初始化的内容需要是常量,例如:

char * terry = "hello";

这个例子中,内存中预留了存储"hello" 的空间,并且terry被赋予了指向这个内存块的第一个字符(对应’h’)的指针。

假设"hello"存储在地址1702,下图显示了上面的定义在内存中状态:

 

这里需要强调,terry 存储的是数值1702 ,而不是'h' 或 "hello",虽然1702 指向这些字符。

指针terry 指向一个字符串,可以被当作数组一样使用(数组只是一个常量指针)。例如,如果我们的心情变了,而想把terry指向的内容中的字符'o' 变为符号'!' ,我们可以用以下两种方式的任何一种来实现:

terry[4] = '!';
*(terry+4) = '!';

 

 

 

记住写 terry[4] 与*(terry+4)是一样的,虽然第一种表达方式更常用一些。以上两个表达式都会实现以下改变:

posted on 2014-03-10 23:18  guozqzzu  阅读(393)  评论(0编辑  收藏  举报