通用指针: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)