野指針,數組指針,指針數組

1.野指針

(1)什麼是野指針?

野指針就是指針指向的位置是不可知的(隨機的,不正確的,沒有明確限制的)

(2)野指針的成因

a.指針爲初始化

全局變量,靜態變量未初始化默認是會初始化的,默認是0
其他變量都不會初始化,默認是隨機值
eg:

#include<stdio.h>
int main()
{
   
   
	int* p; //局部變量指針未初始化,默認是隨機值
	*p = 20;
	return 0;
}

在這裏插入圖片描述

b.指針訪問越界

eg:

#include<stdio.h>
int main()
{
   
   
	int* arr[10] = {
   
    0 };
	int* p = arr;
	for (int i = 0; i < 11; i++)
	{
   
   
	//當指針指向的範圍超出數組arr的範圍時,p就是野指針
		*(p++) = i;
	}
	return 0;
}

在這裏插入圖片描述

2.指針數組和數組指針

(1)指針數組

指針數組是一個數組,存的是指針
eg:

int* arr[3]

(2)數組指針

數組指針是一個指針,指的是數組
eg:

int A[10];
int (*p)[10] = &A;

(3)指針數組和數組指針+1的區別

#include<stdio.h>
int main()
{
   
   
	int* A[8] = {
   
    0 };
	int* p = &A;
	int(*pa)[8] = &A;
	printf("%p %p\n", p,pa);
	printf("%p %p\n", p + 1,pa + 1);
	return 0;
}

在這裏插入圖片描述
當給兩個數組同時加1時,指針數組改變了一個類型的大小,數組指針改變了一個數組的大小

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章