int main()
{
int a=10;
int *p=&a;
return 0;
)
p被称为指针,用来存储地址;也可以说指针就是地址。
x32位机器上:指针的大小是4个字节;
x64位机器上:指针的大小是八个字节;
int main()
{
int a = 10;
int* pc = &a;
char* pa = (char *) & a;
printf("%pn", pc);
printf("%pn", pa);
return 0;
}
int* p:访问四个字节;
char* p:访问1个字节;
double* p:访问8个字节;
指针类型决定了指针的步长,决定了解引用可以访问几个字节。
如:
int*p;p+1;越过四个字节;
char * p;p+1;越过1个字节;
野指针:
访问内存越界,指向的位置是为之的指针被称为野指针。
如何规避野指针:
1、指针初始化
2、小心指针的越界
3、指针指向空间释放置NULL
4、指针使用之前检查有效性
int * p=NULL;//空指针的初始化
指针运算:
指针+-整数 ——>指针走向;
指针-指针——>指针间元素的个数;
如:
#includeint my_strlen(char* str) { char* start = str; char* end = str; while (*end != ' ') { end++; } return end - start; } int main() { char arr[] = "love"; int len = my_strlen(arr); printf("%dn", len); return 0; }
此代码运行结果为4;可以计算指针间元素的个数;
标准规定:
允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较;
指针和数组:
数组名是首元素的地址
1、&arr,此时数组名表示整个数组,取出的是整个数组的地址
2、sizeof(数组名);计算的也是整个数组的大小
数组可以通过指针访问
二级指针:
int main()
{
int a=10;
int *pa=&a;
int**ppa=&pa;
ppa就是二级指针,用来存放一级指针pa的地址
下面画图详解:
ppa就是二级指针
关于指针的详解会在以后更加深入!



