初始指针

Posted 垚垚是小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始指针相关的知识,希望对你有一定的参考价值。

指针类型

指针类型决定了指针解引用时,能访问空间的大小
int *p *p能够访问四个字节
char *p *p能够访问一个字节
double *p 访问八个字节
在这里插入图片描述

指针类型决定了指针走多远
int *p *p+1->走了四个字
double 八个字节
char 一个字节

野指针

指针指向的位置不可知
指针不初始化就是野指针

  1. 指针未初始化
#include <stdio.h>
int main()
{
int *p;//局部变量指针未初始化,默认为随机值
  *p = 20;
return 0;
}
  1. 指针越界访问
#include <stdio.h>
int main()
{
  int arr[10] = {0};
  int *p = arr;
  int i = 0;
  for(i=0; i<=11; i++)
 {
    //当指针指向的范围超出数组arr的范围时,p就是野指针
    *(p++) = i;
 }
  return 0;
}
  1. 指针指向的空间释放
    这里放在动态内存开辟的时候讲解,这里可以简单提示一下

如何规避野指针

  1. 指针初始化
  2. 小心指针越界
  3. 指针指向空间释放即使置NULL
  4. 指针使用之前检查有效性

指针运算

指针减去指针得到的是指针之间元素的个数

# include<stdio.h>
int main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d\\n", & arr[9] - &arr[0]);

}

判断数组长度

# include<stdio.h>
int my_strlen(char* str) {
	char* start = str;
	char* end = str;
	while (*end != '\\0') {
		end++;
	}
	return end - start;
}
int main() {
	//strlen求字符串长度
	//递归的方式 模拟实现strlen
	char arr[] = "bit";
	int len = my_strlen(arr);
	printf("%d\\n", len);
	return 0;
}

以上是关于初始指针的主要内容,如果未能解决你的问题,请参考以下文章

Jekyll 偏移代码片段高亮的初始行

片段中的 EditText 上的空指针异常 [重复]

20160208.CCPP体系详解(0018天)

20160208.CCPP体系具体解释(0018天)

如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?

片段中的空指针异常