两个运算符啊.
* 运算地址,也就是取这个指针指向的变量的值.
& 取地址.
int i, *p;
p = &i; &i 就是取i的地址.p是指针,也就是存放地址的变量.
i = *p; *p这个恰恰相反,取该指针指向的数值.
一定要区别于声明时候的语法.
int *p; 这里的*不是运算符,而是类型符,表示指针类型.
int *p = &i; 这个不是 *p = &i;而是 int *p; p=&i;
这两个运算符是从右到左的.
*&p = *(&p),先取p的地址,然后取这个地址指向的数值.所以*&p = p.
但是 &*P 就要注意了,因为*运算符一定要是合法的地址,否则程序出错.也就一定要保证p的值是合法的.
没有初始化的指针的值是非法的.
int *p;
*p = 11; //非法,p还没初始化;
p = (int*)12312;
*p = 22; //非法,可能指向非程序管理的地址空间.除非你知道该地址是合法的.
int i, pi;
pi = (int)&i;
p = (int*)pi.
*p = 33; ;//因为i是程序的一个变量,所以知道他的地址是合法的
* 运算地址,也就是取这个指针指向的变量的值.
& 取地址.
int i, *p;
p = &i; &i 就是取i的地址.p是指针,也就是存放地址的变量.
i = *p; *p这个恰恰相反,取该指针指向的数值.
一定要区别于声明时候的语法.
int *p; 这里的*不是运算符,而是类型符,表示指针类型.
int *p = &i; 这个不是 *p = &i;而是 int *p; p=&i;
这两个运算符是从右到左的.
*&p = *(&p),先取p的地址,然后取这个地址指向的数值.所以*&p = p.
但是 &*P 就要注意了,因为*运算符一定要是合法的地址,否则程序出错.也就一定要保证p的值是合法的.
没有初始化的指针的值是非法的.
int *p;
*p = 11; //非法,p还没初始化;
p = (int*)12312;
*p = 22; //非法,可能指向非程序管理的地址空间.除非你知道该地址是合法的.
int i, pi;
pi = (int)&i;
p = (int*)pi.
*p = 33; ;//因为i是程序的一个变量,所以知道他的地址是合法的