1. 指针类型
指针以字节为单位;
指针类型决定了解引用时能访问的空间的大小;也决定了指针的步长(指针+1走多远)
2. 野指针
- 指针未初始化
- 指针越界访问
- 指针指向的空间已释放
1
2
3
4
5
6
7
8
9
10
11
|
int * test() { int a = 10; //野指针 return &a; } int main(){ int * p = test(); //test函数里的a是局部变量,出函数时,储存变量的空间已经还给操作系统了 printf ( "%d\n" ,*p); //此时通过解引用不能再访问到a; } |
如何规避野指针呢?
- 指针初始化
- 小心指针越界
- 指针指向空间释放即使置NULL
- 避免返回局部变量的地址
- 指针使用之前检查有效性
3. 指针的运算
3.1 指针+-整数
1
2
3
4
5
6
7
8
9
|
int arr[5] = {0,1, 2, 3, 4}; int * p = arr; int i = 0; for (i=0; i<5; i++) { //printf("%d ",*p); //p++; printf ( "%d " ,*p++); //以上两种写法相同 } |
3.2指针-指针
得到的是中间元素的个数,可以用来求字符串的长度
1
2
3
4
5
6
7
8
9
10
|
int my_strlen( char * arr) { char * start = arr; char * end = arr; while (*end != '\0' ) { end++; } return end - start; } |
3.3 指针的关系运算
其实就是指针比较大小。实际在绝大部分的编译器上是可以顺利完成任务的,然而我们还是应该避免这样写,因为标准并不保证它可行。
1
2
3
4
5
6
7
|
float values[5]; float *vp; int i = 0; for (vp = &values[0]; vp < &values[5];) { *vp++ = 0; } |
4. 指针数组
存放指针的数组
1
2
|
int a; int b; int c; int * arr[3] = {&a,&b,&c}; |
到此这篇关于C语言简明介绍指针的使用的文章就介绍到这了,更多相关C语言指针内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/m0_60416282/article/details/125138575