簡(jiǎn)單的說(shuō):指針就是個(gè)變量,這個(gè)變量里存放著內(nèi)存單元的地址(編號(hào)),指針就是地址。
1.2指針的大小指針在32位平臺(tái)是4個(gè)字節(jié),在64位平臺(tái)是8個(gè)字節(jié)
1.指針類(lèi)型決定了指針進(jìn)行解引用操作時(shí),能夠訪問(wèn)空間的大小。當(dāng)
int* p;p能夠訪問(wèn)4個(gè)字節(jié)
charp;p能夠訪問(wèn)1個(gè)字節(jié)
doublep; *p能夠訪問(wèn)8個(gè)字節(jié)
int * 可以訪問(wèn)4個(gè)字節(jié)的空間,如圖所示:
char * 可以訪問(wèn)4個(gè)字節(jié)的空間,如圖所示:
指針±整數(shù)
指針類(lèi)型決定了:指針走一步能走多遠(yuǎn)(指針的步長(zhǎng))
int* p; p+1 - - - >4(字節(jié))
char* p; p+1- - ->1(字節(jié))
double* p; p+1- - ->8(字節(jié))
總結(jié):指針的類(lèi)型決定了指針向前或者向后走一步有多大(距離:字節(jié))
1.當(dāng)一個(gè)int * 的指針+1,跳過(guò)4個(gè)字節(jié)
1.當(dāng)一個(gè)char * 的指針+1,跳過(guò)1個(gè)字節(jié)
概念:野指針就是指針指向的位置是不可知的(隨機(jī)的,不正確的,沒(méi)有明確的限制)
2.1野指針產(chǎn)生的原因1.指針未被初始化
1.指針越界訪問(wèn)
1.指針指向內(nèi)存空間釋放了
注:把變量a的地址通過(guò)text()函數(shù)將地址傳給指針p,因?yàn)槌隽藅est()函數(shù),變量a的地址就釋放,所以通過(guò)指針無(wú)法訪問(wèn)原先變量a的空間,p指針就變成了野指針。
1.指針變量初始化,把指針變量賦值成空指針
2.小心指針越界
3.指針 指向的空間釋放時(shí)要制成空指針
4.指針使用之前檢查其合法性
result:1 2 3 4 5 6 7 8 9 10
指針 - 指針(大指針 - 小指針)是兩個(gè)指針間元素的個(gè)數(shù)。
前提:兩個(gè)指針必須指向同一個(gè)內(nèi)存空間
1.在絕大多數(shù)情況下數(shù)組名是首元素地址
但也有特殊情況:
1.&arr(&數(shù)組名),其中數(shù)組名不是首元素地址,數(shù)組名表示整個(gè)數(shù)組,&數(shù)組名取出的是整個(gè)數(shù)組的地址
2.sizeof(arr)(sizeof(數(shù)組名)),數(shù)組名表示的是整個(gè)數(shù)組,sizeof(數(shù)組名)計(jì)算的是整個(gè)數(shù)組的大小
&arr與arr的區(qū)別
概念:首先它是一個(gè)數(shù)組,是用來(lái)存放指針變量的,每個(gè)元素是一個(gè)指針。
概念:指向數(shù)組的指針,它本質(zhì)是一個(gè)指針。
注釋?zhuān)?/font>
int (*p)[10];
//p先和*結(jié)合,說(shuō)明p是一個(gè)指針變量,
//然后指向的是一個(gè)大小為10個(gè)整型的數(shù)組,
//所以p是一個(gè)指針,指向一個(gè)數(shù)組,叫做數(shù)組指針
數(shù)組傳參的兩種方式:
1.比如一個(gè)二維數(shù)組 arr[3][5],首先通過(guò)函數(shù)傳入arr,在子函數(shù)中拿int arr[3][5]接收。
1.比如一個(gè)二維數(shù)組 arr[3][5],首先通過(guò)函數(shù)傳入arr,在子函數(shù)中拿int (*p)[5] (數(shù)組指針)接收。
注釋?zhuān)?br />一個(gè)二維數(shù)組的首元素地址不是數(shù)組的中的第一個(gè)數(shù),拿arr[3][5] 舉例arr的首元素是二維數(shù)組的第一行,不是1,所以傳參傳過(guò)去要用一個(gè)數(shù)組指針(int(*p)[5])去接收。
遍歷一維數(shù)組的多種寫(xiě)法
遍歷二維數(shù)組的多種寫(xiě)法
一維整型數(shù)組傳參的三種方式:
void test(int arr[])
{//方式1:用一個(gè)一維數(shù)組接收
}
void test(int arr[10])
{//方式2:用一個(gè)和傳過(guò)來(lái)元素個(gè)數(shù)一樣的數(shù)組來(lái)接收
}
void test(int *arr)
{//方式3:用一個(gè)指針變量來(lái)接收
}
int main()
{int arr[10] = {0};
test(arr);
}
一維指針數(shù)組傳參的三種方式:
void test2(int* arr[20])
{//方式1:用一個(gè)指針數(shù)組來(lái)接收
}
void test2(int* *arr2)
{//方式2:用二級(jí)指針來(lái)接收
}
int main()
{int* arr2[20] = {0};
test2(arr2);//一個(gè)指針的地址
}
6.2二維數(shù)組傳參void test(int arr[3][5])
{//方式1
}
void test(int arr[][5])
{//方式2:行可以省略,列不能省略
}
void test(int (*arr)[5])
{//方式3:用一個(gè)數(shù)組指針來(lái)接收
}
int main()
{int arr[3][5] = {0};
test(arr);//二維數(shù)組傳參,它的首元素地址是
//第一行所有元素
return 0;
}
6.3指針傳參
注:當(dāng)傳過(guò)去一個(gè)指針或者一個(gè)地址時(shí)用一個(gè)指針接收。
概念:存放函數(shù)指針類(lèi)型元素的數(shù)組通俗的說(shuō)是指向函數(shù)的指針。
概念:存放函數(shù)指針類(lèi)型元素的數(shù)組
#includeint Add(int x, int y)
{return x + y;
}
int Sub(int x, int y)
{return x - y;
}
int Mul(int x, int y)
{return x * y;
}
int Div(int x, int y)
{return x * y;
}
int main()
{//需要一個(gè)數(shù)組,來(lái)存放4個(gè)函數(shù)的地址-函數(shù)指針的數(shù)組
int(*parr[4])(int, int) = {Add, Sub, Mul, Div };//函數(shù)指針的數(shù)組
int i;
for (i = 0; i< 4; i++)
{printf("%d\n", parr[i](2, 3));//result:5,-1,6,0
}
return 0;
}
應(yīng)用:計(jì)算器
#includeint Add(int x, int y)
{return x + y;
}
int Sub(int x, int y)
{return x - y;
}
int Mul(int x, int y)
{return x * y;
}
int Div(int x, int y)
{return x / y;
}
void menu()
{printf("************************\n");
printf("*** 1.Add 2.Sub ****\n");
printf("*** 3.Mul 4.Div ****\n");
printf("******** 0.exit *****\n");
printf("************************\n");
};
int main()
{int input;
int x;
int y;
//定義一個(gè)函數(shù)指針數(shù)組來(lái)存放函數(shù)
int(*pfArr[])(int, int) = {0, Add, Sub, Mul, Div };
do {menu();
printf("請(qǐng)選擇:>\n");
scanf("%d", &input);
if (input >= 1 && input<= 4)
{ printf("請(qǐng)輸入兩個(gè)數(shù):>\n");
scanf("%d %d", &x, &y);
int ret = pfArr[input](x, y);
printf("%d\n", ret);
}
else if (input == 0)
{ printf("退出程序!\n");
}
else
{ printf("選擇無(wú)效,請(qǐng)重新選擇!\n");
}
} while (input);
return 0;
}
*8.1指向函數(shù)指針數(shù)組的指針概念::一個(gè)指針指向一個(gè)數(shù)組,數(shù)組的元素都是函數(shù)指針
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧