例题1:已知如下限定判断下面绿字语句是否正确
int a = 0;
int b = 0;
const int* p = &a;
int* const q = &b;
const int** s = &p;
int* const* t = &q;
const int* const* z = &p;
图解语句:
逐句分析:
//const int* p = &a;//指向不能改变,p的指向的地址不能改变,p自身的值可以改变 a的值不能改变
//int* const q = &b; //q是const指针所知指之物不能改变,是整形指针 q中存放的b的地址不能改变
//const int** s = &p;//不能通过两次解引用修改a的值
//int* const* t = &q;//不能通过*t来改q的值
//const int* const* z = &p; //因为const修饰了,p这个指针变量和p指针指向的地址里的数据 限定死了
解:
*p = 10;错误
p = &b;正确 只限定了*p p的指向可以随意改变
*s = &b;正确 *s就是p,p的指向可以随意改变
**s = 2;错误 s不能通过两次解引用来修改a的值 a的值不能发生改变了
*t = &a;错误 a的值不能改变
**t = 3;正确 b的值可以改变 没有限定
*z = &a;*z做限定了
**z = 4;**z做限定了
数组指针
一个指向数组的指针
对数组指针重命名
typedef
typedef 是在计算机编程语言中用来为复杂的声明定义简单的别名。它本身是一种存储类的关键字,与auto 、 extern 、 mutable 、 static 、 register 等关键字 不能 出现在同一个表达式中。
typedef的特点: 可将一切合法的定义转化为类型
typedef unsigned int UINT;//typedef定义为无符号整型类型
typedef int* PINT;//typedef定义为整形指针类型
typedef int Array[10];//typedef定义数组类型
int main()
{
UINT a = 10, b = 20;
PINT p=NULL, s=NULL;
Array ar = { 12,34,54 }, br = {23,34,54};
return 0;
}
typedef int* Point_32;
typedef int** PPoint;
typedef int(*Parr)[4];//parr 代替了 int(*Parr)[4] //数组帧类型的重命名
//数组指针 arr + 1
int main() {
int arr[3][4];
int value;
/*1 1 1 1
1 1 1 1
1 1 1 1*/
int(*Parr)[4] = arr; //指向四个格子的数组指针 // Parr + 1;加一加的是四个单元格
Parr point_arr = arr;
}
[点击并拖拽以移动]
指针数组
一个保存指针类型数据的数组
函数指针:
int add(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
int main()
{
int a, b;
char op[10] = {0};
gets_s("%d%d", &a, &b);
gets_s("%s", &op);
//定义函数指针
int (*pfun)(int ,int)//声明一个指针变量
//函数指针类型
if (strcmp(op, "+") == 0)//比较字符串大小
{
pfun=add//指向栈为该函数开辟的地址空间的起始地址
}
else {
mul(a, b);
}
}