指针
指针类型用于表示内存地址,本质上是一个整数。对于指针类型的变量,可以使用星号操作,对指定的内存地址进行读写。
内存地址的表示
变量和内存是对应的,每个变量都对应于若干字节的内存。当读取一个变量的值时,其实就是读取内存的值。当修改一个变量的时候,其实就是修改了内存的值。
例如,下面的定义的变量 a 在内存对应4个字节。
unsigned int a = 0xA0A0A0A0; // a 内存中的值:A0 A0 A0 A0 a = 0xB1B1B1B1; // a 内存中的值:B1 B1 B1 B1
把变量所对应的内存的地址,简称为变量的地址。变量的地址是一个整数,可以用操作符 & 来取得。例如:
int a = 0; double b = 0; printf("%08x\n",a); // 把地址按十六进制打印 printf("%08x\n",b); // 把地址按十六进制打印
指针的概念
带星号的类型,称为指针类型。这种类型定义的变量,称为指针类型的变量,简称指针变量,或称为指针,例如:
#include<stdio.h> int main() { int a = 10; int b = 11; int* p = &a; // p 指向变量 a 的地址 p = &b; // 修改 p 的值,现在指向了变量 b 的地址 return 0; }
星号操作
在引入指针之后,可以使用另外一种办法来修改内存值:星号操作。可以使用星号操作符 * 作用与指针变量上,来直接读写内存的值。例如:
#include<stdio.h> int main() { int a = 0; int* p = &a; // p 指向 a * p = 0xA0A0A0A0; // 写操作:修改 p 指向的内存的值 * p = 0x13141516; // 写操作:修改 p 指向的内存的值 int b = * p; // 读操作:读取 p 指向的内存的值 int c = * p + 2; // 读操作:读取 p 指向的内存的值 return 0; }
指针与数组
我们知道,数组在内存中就相当于一串紧密排列的变量。实际上数组名代表的就是这一块内存的首地址。
#include<stdio.h> int main() { int arr[4] = {1,2,3,4}; int* p = arr; // 把 arr 转换成 int* int* p2 = &arr[0]; // 第一个元素的地址 // 指针 p 和 p2 都指向了数组的第一个元素的地址。 return 0; }
先记录那么多,需要了在增加
来源:https://www.cnblogs.com/QLEO/p/12284526.html