1.指针是什么?
指针是内存中一个最小单元的编号,也就是地址。
平时口头语中说的指针,通常指的是指针变量,是用来存放内存的变量。
指针变量:
我们可以通过&(取地址操作符)取出变量的内存真实地址,把地址可以存放在一个变量中,这个变量就是指针变量。
注意;
在32位的机器上,地址是32个0或者1组成的二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就应该是4个字节。
如果在64位机器上,如果有64个地址线,哪一个指针变量的大小是8个字节,才能存放一个地址。
总结:
指针是用来存放地址的,地址是唯一标识一块地址空间的。
指针的大小在32位平台是4个字节,在68位平台是8个字节。
野指针:就是指针指向的位置是不可知的(随机的、不确定的、没有明确限制的)
原因:
1.指针为初始化
#include<stdio.h>
int main()
{
int* p;
*p = 20;
return 0;
}
2.指针越界访问
3.指针指向空间的释放
指针运算
指针加减整数
#define N_VALUES 5
float values[N_VALUES];
float *vp;
for (vp = &values[5]; vp < &values[N_VALUES];)
{
*vp++ = 0;
}
指针减去指针
也有可能是负数。 &arr[0]-&arr[9] 结果为-9。
int my_strlrn(char* str)
{
char* start = str;//数组名是首元素地址,str相当于arr 是数组的首元素地址
while (*str)
{
str++;
}
return str - start;
}
int main()
{
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
指针关系运算
二级指针
指针数组
存放指针或者存放地址的数组就叫做 指针数组。
int main()
{
int a = 10;
int b = 11;
int c = 12;
int d = 13;
int e = 14;
int* arr[5] = { &a,&b,&c,&d,&e };
for (i = 0; i < 5; i++)
{
printf("%d", *(arr[i]));/解引用
}
return 0;
}