指针的基本概念
指针变量用于保存变量的地址
声明指针时加一个 * ,表名该变量存储的是一个地址
指针变量与普通变量
指针变量与普通变量的区别 :
从语法角度:指针变量多了个标识 星号,以此表示该变量存储的是地址
从内存角度:两者无区别,都是一块内存,并且都有地址
唯一的区别:普通变量存储数据,指针变量存储地址
指针的占用内存
无论指针是什么类型,都是4个字节(32位),8字节(64位),因为他们全部都是保存地址的
指针的赋值
int a=0;
int *p = &a;
*p = 0;
p = a的地址
a = 0;
&a = a的地址
&p = p的地址
*p = 20;
a的值变为20;
指针运算
指针可以和整数进行运算,运算结果是另一个地址
步长决定指针移动到哪个位置
指针类型不同,其步长便不同。如:char 步长为1 int步长为4
数组中的运算
野指针
如果指针未初始化或者指向了一个不确定的空间,这种指针就叫做野指针
空间被回收了,指针还指向原来的空间,也是野指针
尽量不要在函数中返回一个局部变量的地址,会造成野指针
// 野指针(悬挂指针)
void textX()
{
// 如果指针未初始化或者指向了一个不确定的空间,这种指针就叫做野指针
//空间被回收了,指针还指向原来的空间
int *p = 0x888;
*p =100;
printf("%d\n",*p);
}
空指针
int * p = NULL
指针类型的转换
int a=10;
int *p = &a;
char *cp =(char *) p;
指针和数组名
数组名就是一个指针,指向首元素的地址,只不过该指针不能修改指向
指针方法遍历数组
int i;
int arr[] = {1,2,3,4};
for(i=0;i<4;i++){
printf("%d\n",*(arr+i));
}
函数传参的区别
基础数据类型传参时,是为值传递
数组传参时,是为地址传递
普通情况下,数组可以进行传参修改,变量不行