& 运算符用作获取变量的地址。
* 运算符通过变量的地址取值、赋值。
1.基本用法:
void ensample1()
{
int *pointer;
int variable;
// 把 33 赋给 variable 变量。
variable = 33;
// 把 variable 变量在栈上的内存地址赋给 pointer 指针变量。
pointer = &variable;
// 往 pointer 指针变量所指的内存中写入 22。
//( 此时 variable 的值也为 22 )
*pointer = 22;
// 把 22 当地址赋给 pointer 指针变量。
pointer = 22;
}
2.指向指针的指针:
void changeCharacter( char *character, char *t_character, char **l_character )
{
unsigned long strLen = strlen( character );
char topperTemp[ strLen ], lowerTemp[ strLen ];
for( int i = 0; i < strLen; i++ )
{
// 转大写
topperTemp[i] = _toupper(character[i]);
// 转小写
lowerTemp[i] = _tolower(character[i]);
}
printf( "topperTemp: %s lowerTemp: %s \n", topperTemp, lowerTemp );
t_character = topperTemp;
*l_character = lowerTemp;
}
void ensample2()
{
char name[] = "Kobe-Byant";
char *toupper = NULL, *lower = NULL;
// 大小写转换
changeCharacter( name, toupper, &lower );
// 打印转换后的结果
printf( "toupper: %s lower: %s \n", toupper, lower );
/**
最终打印结果:
topperTemp: KOBE-BYANT lowerTemp: kobe-byant
toupper: (null) lower: kobe-byant
分析:
toupper 变量没有值是因为,toupper 一开始指向 NULL。
函数 changeCharacter() 用一个临时变量 t_character 接收 toupper 指向 NULL 的地址。
当 t_character 重新指向 topperTemp 时,对外部变量 toupper 没有影响。
而 lower 变量有值是因为,lower 一开始指向 NULL。
函数 changeCharacter() 用一个临时变量 l_character 接收 lower 变量在栈上的地址。
*l_character = lowerTemp; 这句就是取出 l_character 变量存放的 lower 指针,
然后根据 lower 指针找到 lower 变量,并把 lowerTemp 的地址 赋给 lower。
*/
}