1.什么是指针?
在编程里,指针是一种特殊的数据类型,其存储的并非普通的数据值,而是内存地址。通过指针,能够直接对该内存地址中的数据进行访问和操作。
指针是一种特殊的数据类型
int–>整形
float–>浮点型
指针–>地址
指针的大小取决于操作系统的位数。常见的操作系统位数有 32 位和 64 位,不同位数系统下指针大小不同:
32 位操作系统:指针大小为 4 字节。
64 位操作系统:指针大小为 8 字节
2.指针与指针变量的区别?
指针是一种数据类型,而指针变量是数据类型为指针的变量。
int a=0;//int是整形,a是整形变量
float b=1.0;//float是浮点型,b是浮点型变量
int* c;//int*是指针,c是指针变量
3.*的作用
1.用于创建指针变量(作用对象为非指针变量)
int A;
char B;
float C;
int* a=&A;//创建指针变量a并将A的地址赋给a
char* b=&B;//创建指针变量b并将B的地址赋给b
float* c=&C;//创建指针变量c并将C的地址赋给c
若只创建指针变量而不赋地址,则该指针为野指针,会导致非法访问。
2.解引用操作符即用于访问内存(作用对象为指针变量)
int a=1;
int* b=&a;//取出a的地址并赋给指针变量b
printf(“%d”,*b);//访问b所储存的地址即访问a的地址,得到a的值
4.不同类型指针的区别?
不同类型指针的区别在于访问空间的步长不同
下面我们来举例说明:
char str[]=“hello world”;//我们知道数组名可以代表首元素的地址
char* p1=str;//把h的地址赋给char* 类型的p1
int* p2=str;//把h的地址赋给int*类型的p2
p1+1即e的地址,p2+1即o的地址。
*p1访问的是地址为h,大小为一个字节的内存;
*p2访问的是地址为h,大小为四个字节的内存。
5.数组指针和指针数组的区别?
1.数组指针:数组指针是指向某个数组的指针。
int (*num)[10];//num是指向一个有10个整形的数组的指针
我们可以拆分着来看:
( * num)–>创建变量名为num的指针变量
int [10]–>指向的对象为含有10个整形的数组
num访问内存的步长为sizeof(数组)
2.指针数组:数组元素类型为指针的数组。
int * num[10];// * 和num没有用括号连接,[]的优先级高于*,所以num先于[10]连接
num[10]指明是数组
int* 指明数组元素类型是int *
6.多级指针
下面我们以二级指针为例:
二级指针:即用一个指针来存放另一个指针的地址:
int a=1;
int* p=&a;//创建指针变量p存放a的地址
int** pp=&p;//创建二级指针变量pp存放p的地址
我们同样可以拆分着来看:
*pp表明pp是一个指针;
int * 表明pp指向的对象是一个指针。
*pp;//得到p
**pp;//得到a的值
*如有错误,欢迎纠正。