通用指針:void*
1.通用指針可以接受任意類型指針的賦值
2.通用指針不攜帶類型信息
3.通用指針不能進行尋址操作(解引用操作)
4.通用指針賦值給普通指針,需要顯示類型轉換(強制類型轉換)
指針與一維數組的關係
#include <bits/stdc++.h>
using namespace std;
int main()
{
int arr[4] = {11,22,33,44};
//一維數組名錶示:數組首元素地址
//arr[1] --> *(arr + 1) 下標法本身就是指針尋址
int *p = arr;
//p[1] --> *(p + 1) 指針可以使用下標法訪問元素
// &arr+1 移動一個數組單位,指向下一個數組
//數組地址 尋址 = 數組首元素的地址
// * & arr -->arr
return 0;
}
//arr[0][0]:第一行第一個元素
//&arr[0][0]:第一行第一個元素的地址
//&*(arr[0]+0)->arr[0]:第一行第一個元素的地址
//arr:第一行的地址/第一行這個一維數組的地址
//*arr->arr[0]:第一行第一個元素的地址
//arr+1:第二行的地址
已知:int a[2][3];下列各表達式的含義:
&a:數組的地址
a:第一行的地址
&a[0]:第一行的地址
a[0]:第一行第一個元素的地址
a[0][0]:第一行第一個元素
&a[0][0]:第一行第一個元素的地址
已知:int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
a[1]+2:第二行第三個元素的地址
*(a+1)+2:第二行第三個元素的地址
*(a[1]+2):第二行第三個元素
*(*(a+1)+2):第二行第三個元素
(*(a+1))[2]:第二行第三個元素
已知:int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
int(*p)[4]=a;
int*q=&a[0][0];請用p,q分別表示下面的表達式:
a[1]: *(p+1) q+4
a+2: p+2 (int (*)[4])(q+8)
a[2][2]: *(*(p+2)+2) *(q+10)