指针的概念
指针变量也是变量
指针存放的内容是一个地址,该地址指向一块内存空间
指针是一种数据类型
指针变量的定义
可以定义一个指向变量的指针变量
int *p; //表示定义一个指针变量
*p //代表指针所指内存的实际数据
切记指针变量只能存放地址,不能将一个int变量直接赋值给一个指针
内存的最小单位是BYTE
对于内存每个BYTE都有一个唯一不同的编号
这个编号就是内存地址
一个地址编号,对应的是BYTE的空间大小
一个int 4个BYTE 占用四个地址编号
地址编号
在32位系统下,是一个4个字节的无符号的整数
在64位系统下,是一个8个字节的无符号的整数
1个char 占用1个地址编号
long long 占用8个地址编号
#include<stdio.h> int main() { int *p; //定义了一个可以执行int类型地址的指针变量,名字叫 p int *是一种数据类型 int a; //定义了一个int类型的变量,名字叫a a = 1; p = &a; //把a的内存地址赋值给p *p = 10; //通过指针变量间接的访问a的值,*p代表指针指向变量的值,p代表指向变量的地址 printf("%p\n", p); //printf函数族中对于%p一般以十六进制整数方式输出指针的值 //输出的是首地址的第一个编号 printf("a = %d\n", a); //输出a的值是10 a = 100; printf("*p = %d\n", *p); //输出*p是100 int b = 2; p = &b; //又指向了b的地址 printf("%d\n", *p); void *p2; // 可以指向任何类型的地址,void代表无类型 return 0; }
数据类型不兼容的时候,会出现错误,强转也会出错
char *p1;
int *p2;
long long *p3;
printf("%lu, %lu, %lu\n",sizeof(p1), sizeof(p2) ,sizeof(p3) );
不管指向什么类型的变量,在同一系统下,地址的大小总是一样的
32位 4 64位 8