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