文章目录
一,指针是什么
通过指针找到以它为地址的内存单元
存放内存单元地址的变量
二,指针和指针类型
指针类型的作用:指针类型解引用操作的时候,能够访问空间的大小
int main()
{
int a = 10;
int *pa =&a ;
char *pc = &a;
printf("%p\n", &a);
printf("%p\n", pa);
printf("%p\n", pa+1);
printf("%p\n", pc);
printf("%p\n", pc+1);
}
总结:
指针的类型决定了指针向前或向后走多大距离
三,野指针
意思:指针指向随机
原因:
1,指针未初始化
2,指针越界–
很容易在for循环里面出现这个问题
3,指向的空间被释放
4,如何避免
1,指针初始化,不知道初始化什么值时用NULL
2,用完以后不用了令其=NULL
四,指针运算
1,指针与整数加减
2,指针减指针(数组里面得到中间元素个数)
#include<stdio.h>
mystrlenth(char*str)
{
char* start = str;
char* end = str;
while (*end != '\0')
{
end++;
}
return end - start;
}
int main()
{
char arr[] = "bit";
int len = mystrlenth(arr);
printf("%d", len);
return 0;
}
五,指针和数组
数组可以用指针来访问
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int* p = arr;
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%p======%p\n", &arr[i], p + i);
}
return 0;
}
#include<stdio.h>
int main()
{
int arr[10] = { 0 };
int* p = arr;
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
printf("%d", arr[i]);
printf("\n");
for (i = 0; i < 10; i++)
printf("%d", *(p + i));
return 0;
}
六,二级指针
#include<stdio.h>
int main()
{
int a = 30;
int* pa = &a;
int** ppa = &pa;
int*** pppa = &ppa;
printf("%d ,%d ", **ppa, ***pppa);
return 0;
}
找到哪个,几个*–解几个
七,指针数组
代码如下
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* arr[3] = { &a,&b,&c };
int i = 0;
for (i = 0; i < 3; i++)
printf("%d ", *(arr[i]));
return 0;
}