- 指针基本声明与使用
int num = 1;
int *pNum = #
int nums[5] = {1, 2, 3, 4, 5};
int *pNums = nums;
int *p = new int[10];
*p = 10;
cout << pNum << ":" << *pNum << endl
<< pNums << ":" << *pNums << endl
<< p << ":" << *p << endl;
delete []p;
//将指针置为空
pNum = 0; //int zero = 0; pNum = zero; 错误:不能把int变量直接赋给指针
pNums = NULL;
p = nullptr;
运行结果:
0x62fe40:1
0x62fe38:1
0x7c1570:10
- 指针与数组
char aChar[10];
cin >> aChar;
cout << aChar << endl;
char *pChar = "word";
//分别输出地址,字符串,首字符:
cout << (int *)pChar << ":" << pChar << ":" << *pChar << endl;
//copy地址;
pChar = aChar;
//copy内容:
pChar = new char[strlen(aChar) + 1];//'\0'
strcpy(pChar, aChar);
cout << " pChar: " << pChar <<endl;
输入:hello 输出结果:
hello
0x406068:what:w
pChar: hello
- 指针函数与函数指针
函数指针指的是函数的返回值为指针类型,例如:
char *fun()
{
char *p = "fun()";
return p;
}
指针函数本质上也还是指针,只是这个指针指向的是一个函数
声明格式:类型说明符 (*函数名) (参数)
例如:
int add(int x,int y)
{
return x+y;
}
int sub(int x,int y)
{
return x-y;
}
//指针函数
int (*fun)(int x,int y);
int main()
{
//第一种写法
fun = add;
cout << "(*fun)(1,2) = " << (*fun)(1,2) <<endl;
//第二种写法
fun = ⊂
cout << "(*fun)(5,3) = " << (*fun)(5,3)<<" "<< fun(5,3);
}
输出结果为:
(*fun)(1,2) = 3
(*fun)(5,3) = 2 2
- 指针常量与常量指针
指针常量的声明:数据类型 * const 指针变量。
常量指针的声明:数据类型 const * 指针变量 或者 const 数据类型 *指针变量。
常量指针常量的声明:数据类型 const * const 指针变量 或者 const 数据类型 * const 指针变量。
指针常量是指向常量的指针,不能通过指针修改指针指向的值,但是可以修改指针的指向
int i = 1, j = 2;
int const *p = &i;//或者是 const int *p
//*p = j;错误:不能通过指针修改指向的值
p = &j;//正确:可以修改指针的指向
常量指针指的是不能改变指针的指向,但是可以改变指向地址的值
int i = 1,j =2;
int *const p = &i;
//p = &j; 错误:不能改变指针指向
*p = j;//正确:可以修改指向地址的值