指针
指针:指针是一种保存变量地址的变量
指针的声明:
int *p; // 声明一个 int 类型的指针 p
char *p // 声明一个 char 类型的指针 p
int *arr[10] // 声明一个指针数组,该数组有10个元素,其中每个元素都是一个指向 int 类型对象的指针
int (*arr)[10] // 声明一个数组指针,该指针指向一个 int 类型的一维数组
int **p; // 声明一个指针 p ,该指针指向一个 int 类型的指针
指针的初始化:
/* 方法1:使指针指向现有的内存 */
int x = 1;
int *p = &x; // 指针 p 被初始化,指向变量 x ,其中取地址符 & 用于产生操作数内存地址
/* 方法2:动态分配内存给指针 */
int *p;
p = (int *)malloc(sizeof(int) * 10); // malloc 函数用于动态分配内存
free(p); // free 函数用于释放一块已经分配的内存,常与 malloc 函数一起使用,要使用这两个函数需要头文件 stdlib.h
非法使用:
#include "stdio.h"
int main(){
int *p;
*p = 1;
printf("%d\n",*p);
return 0;
}
指针的使用程序范例
#include <iostream>
using namespace std;
//指针声明以及初始化
void init_pointer_1() {
int x = 1;
int *p;
p = &x;
cout << *p << endl;
}
//指针声明以及初始化
void init_pointer_2() {
int x = 1;
int *c = & x;
cout << *c <<endl;
}
//指针错误的声明以及使用方法
void incorrect_init_pointer() {
int *d;
*d = 1 ;
cout << *d;
}
//一位数组的使用
void array1_pointer(){
int a[5] = {1,2,3,4,5};
int *p;
p = a;
cout << *(p+1);
}
//数组指针在二维数组上的运用
void array2_pointer() {
int a[2][3] = {1,2,3,4,5,6};
int (*p)[3] = a;
cout << *(p+1)[0]<< endl;
}
//声明一个指针指向一个int类型的指针
void pointer_to_intpointer(){
/*
解析: 地址 -> 内容
c 0x6ffde4 -> 1
&c 0x6ffdd8 -> [0x6ffde4]
所以要求出1的值,就是读地址加读地址*(*(&c))
*/
int x = 1;
int *c = &x;
int **p;//这是一个指针,指向另外一个int类型的指针,它的内容是一个指针的地址
p = &c;
cout << &c << endl;
cout << **p;
}
int main() {
//array2_pointer();
//array1_pointer();
pointer_to_intpointer();
return 0;
}