当前位置:网站首页>C语言指针详解
C语言指针详解
2022-07-31 05:09:00 【怎么这么多名字都被占了】
有这么一道题:
用变量a给出下面的定义:
1、一个指针类型的变量,访问该变量存的地址时,遵循int的访问规则;
2、一个指针类型的变量,访问该变量存的地址时,遵循指针的访问规则。访问那个指针类型的变量时,遵循int的访问规则;
3、一个有10个指针类型变量的数组,访问这些变量存的地址的时候,遵循int的访问规则;
4、一个指针类型的变量,访问该变量存的地址时,遵循(int [10])的访问规则;
5、一个指针类型的变量,访问该变量存的地址时,遵循函数的访问规则,该函数有一个int类型的参数并返回一个int类型的数;
6、一个有10个指针类型变量的数组,访问该变量存的地址时,遵循函数的访问规则,该函数有一个int类型的参数并返回一个int类型的数;
解:
这道题都是关于指针的。那么,什么是指针?
首先,指针不是地址!!!!!!!!!!!!!!!!!!
那么,指针是什么呢?指针其实是一种数据类型,像int char这样的。有些人说了,“定义指针时,不是int *p;吗,类型不是int吗?”其实不然。我们来看看这段代码:
int *p;首先,p是个变量。那么*就是类型,说明p是指针类型的,指针类型变量里存的是地址,并不代表指针就是地址。那么,int是什么?int在这里表示:
访问该指针类型的变量时,遵循int的访问规则,即,访问4字节。
所以,有些人说的所谓“指针指向的变量是啥,指针的‘类型’就是啥”是错漏百出的!!
我们来看这个例子:
int main(void){
short var=0x01;
char *p=&var;
return 0;
}在gcc里,这段代码会出现警告,但警告不是错误,可以正常运行,这也是判断大端小端的方法之一。
回到那些题,我们来给出分析
用变量a给出下面的定义:
1、一个指针类型的变量,访问该变量存的地址时,遵循int的访问规则;
int *a;解析:我们在上面讲过,这里不在赘述。
2、一个指针类型的变量,访问该变量存的地址时,遵循指针的访问规则。访问那个指针类型的变量时,遵循int的访问规则;
int **a;解析:*a是指针类型的变量,访问该变量存的地址时,遵循*(指针)的访问规则。而访问这个指针类型的变量时,遵循int的访问规则。
3、一个有10个指针类型变量的数组,访问这些变量存的地址的时候,遵循int的访问规则;
int *a[10];解析:a是一个数组的名字,这个数组里的变量的类型为*(指针),访问该指针时,遵循int的访问规则(int *)。
4、一个指针类型的变量,访问该变量存的地址时,遵循(int [10])的访问规则;
int (*a)[10];解析:a是一个指针类型的变量,访问该变量里存地址时,遵循(int [10])的访问规则。
常见错误答案:
int *a;
a=&shuzu[0];错因:访问这个指针类型的变量a里存的地址时,遵循int的访问规则,与题目不符。
修改错误答案:
int (*a)[10];
a=shuzu;要时刻记住:数组的名字就是数组的起始地址。所以不需要写&shuzu,直接写shuzu即可
5、一个指针类型的变量,访问该变量存的地址时,遵循函数的访问规则,该函数有一个int类型的参数并返回一个int类型的数;
int (*a)(int);解析:a是一个指针类型的变量,访问该变量存的地址时,遵循int (int)的访问规则,即函数,该函数有一个int类型的参数并返回一个int类型的数
常见错误答案:
int *a;
*a=function(_int);错因:访问这个指针类型的变量a里存的地址时,遵循int的访问规则,与题目不符。
修改错误答案:
int (*a)(int);
a=function;要时刻记住:函数的名字就是函数的起始地址。所以不需要写&function,直接写function即可
6、一个有10个指针类型变量的数组,访问该变量存的地址时,遵循函数的访问规则,该函数有一个int类型的参数并返回一个int类型的数;
第一种方法:
typedef int (*a_t)(int);
a_t a[10];解析:这种方法分步做。typedef给数据类型起别名。起别名时,先写typedef,在像定义变量一样起别名,“变量名”就是该数据类型的别名。
第二种方法:
int (*a[10])(int);这种方法就是把第一种方法合成一步。
第三种方法:
typedef int (*a_t)(int);a_t a[10];解析:这种方法看上去只有一步,实则有两步,就是第一种方法的变种。
常见错误答案:
int *a[10];
a=&function(_int);要是靠这段代码去面试,面试官都有喊声“带聪明”
错因:首先,a是一个数组的名字,这个数组里的变量的类型为*(指针),访问该指针时,遵循int的访问规则(int *)与题目不符。其次,&function(_int)是取该函数返回值的地址,但该函数的返回值已经“死”了。
编译报错:
In function 'main':
[Error] lvalue required as unary '&' operand到这里,指针基本上就介绍完了。我相信最后一个大家肯定会改了。
边栏推荐
- [MQ I can speak for an hour]
- a different object with the same identifier value was already associated with the session
- 数据集划分以及交叉验证法
- 质量小议12 -- 以测代评
- Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it
- MySQL forgot password
- 分布式事务处理方案大 PK!
- 【MQ我可以讲一个小时】
- Redis进阶 - 缓存问题:一致性、穿击、穿透、雪崩、污染等.
- <urlopen error [Errno 11001] getaddrinfo failed>的解决、isinstance()函数初略介绍
猜你喜欢

Sun Wenlong, Secretary General of the Open Atom Open Source Foundation |

Redis进阶 - 缓存问题:一致性、穿击、穿透、雪崩、污染等.

12 reasons for MySQL slow query

About the problems encountered by Xiaobai installing nodejs (npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)

The interviewer asked me TCP three handshake and four wave, I really

centos7安装mysql5.7步骤(图解版)

Mysql——字符串函数

MySQL8.0.26安装配置教程(windows 64位)

分布式事务处理方案大 PK!

sql语句-如何以一个表中的数据为条件据查询另一个表中的数据
随机推荐
Summary of MySQL common interview questions (recommended collection!!!)
Flink sink ES 写入 ES(带密码)
torch.normal函数用法
12 reasons for MySQL slow query
a different object with the same identifier value was already associated with the session
Linux的mysql报ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘ (using password NOYSE)
ABC D - Distinct Trio(k元组的个数
Anaconda配置环境指令
关于小白安装nodejs遇到的问题(npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)
PCL calculates the point cloud coordinate maximum and its index
ES 源码 API调用链路源码分析
Temporal介绍
pytorch中的一维、二维、三维卷积操作
限流的原理
Refinement of the four major collection frameworks: Summary of List core knowledge
STM32——DMA
Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
About the problems encountered by Xiaobai installing nodejs (npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)
pycharm专业版使用
[mysql improves query efficiency] Mysql database query is slow to solve the problem