C++指针

一、定义

指针:用来存放变量地址(起始地址)的变量(间接访问)。 引用操作符&:获取一个变量的地址值; 解引用操作符*:获取一个地址对应的数据;

1
2
3
4
5
int i = 5;
int *i_pointer = &i; //定义一个指针变量,32位下占4字节
printf("%d", i); //直接访问,输出5
printf("%d", *i_pointer); //间接访问,输出5
printf("%d", i_pointer); //输出i所在的地址
## 二、使用场景 ### 1.传递 函数定义时使用变量地址:
1
2
3
4
void(int *j)
{
*j = 5; //*j等价于变量i
}
函数调用时传递变量地址:
1
change(&i); //j=&i
### 2.偏移 根据指针加减偏移量形成新的地址
1
2
3
4
5
6
7
int a[5]={1,2,3,4,5};//数组名a存储了其起始地址
int *p;
p = a;
for (int i=0;i<5;i++)
{
printf("%d",*(p+i)); //输出a[i]的值
}
数组名作为实参传递给子函数时,弱化为指针
1
2
3
4
5
6
7
8
9
10
11
12
void change(char *d)
{
*d = 'H';
d[1] = 'E';
*(d+2) = 'L';
}
int main()
{
char c[10] = "hello";
change(c); //变为HELlo
return 0;
}
## 三、指针与动态内存申请malloc C头文件:stdlib.h
1
2
3
4
5
6
int size=20; //需要申请的字节数
char *p;
p = (char*)malloc(size); //在堆区申请20字节空间,malloc返回无类型指针void*,需要强制转换
strcpy(p,"malloc success");
puts(p); //输出malloc success
free(p); //用完记得释放