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時,指針數組改變了一個類型的大小,數組指針改變了一個數組的大小