int main()
{
int a = 10;
int* p = NULL;
p = &a;
}
a是一个变量,p是一个指针,存储这a的地址。
指针p的类型必须与变量a的类型保持一致,就比如int类型的指针只能存储int类型的变量,否则报出异常。
什么是指针?
指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:数据类型* 变量名;
例如:
int main() {
int* ip; /* 一个整型的指针 /
double dp; /* 一个 double 型的指针 /
float fp; /* 一个浮点型的指针 /
char ch; /* 一个字符型的指针 /
}
注意:对于指针变量来说。ip是变量名称,int是变量类型。大家理解的时候切不可将*ip作为一个整体。
如何使用指针?
1、变量
定义一个指针变量,把变量地址赋值给指针,访问指针变量中可用地址的值。
2、参数
void add(int* a) {
a += 10;
}
注意:参数是指针的话,如果在函数里面修改值,那么指针指向的这个变量的值也会发生改变。
3、返回值
指针也可以作为一个函数的返回值来使用,例:类型* 函数名(){方法体}
4、指针数组
指针数组用法与一般类型的数组相同,不同的是数组中存放的是指针变量。
例:
//声明一个长度为3的指针数组,数组中数据的类型为int*
int* arr[3];
//可以通过for循环给指针数组赋值
for (int i = 0; i < 3; i++)
{
arr[i] = &i;
}
当然,有一级指针那么就会有二级指针,也叫指向指针的指针,就像数组一样。
空指针:
在指针初始化时,如果没有明确指针指向的地址,那么我们需要给指针指向一个空地址(NULL)。值为NULL的指针,被称为空指针。
指针支持的算数运算符包括:++ 、–、+、-
int main()
{
//定义一个数组
int arr[5] = { 1,2,3,4,5 };
//定义一个指针,指向数组的第一个元素(默认就是第一个元素)
int* p = arr;
p++;
}
注意:指针的每一次递增(递减),它其实会指向下(上)一个元素的存储单元。
指针在递增和递减时跳跃的字节数取决于指针所指向变量数据类型长度,比如 int 就是 4 个字节。