当前位置:网站首页>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
到这里,指针基本上就介绍完了。我相信最后一个大家肯定会改了。
边栏推荐
- Minesweeper game (written in c language)
- DVWA安装教程(懂你的不懂·详细)
- Summary of MySQL common interview questions (recommended collection!!!)
- 精解四大集合框架:List 核心知识总结
- Anaconda配置环境指令
- SQL injection of DVWA
- Mysql application cannot find my.ini file after installation
- 关于小白安装nodejs遇到的问题(npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)
- 110 MySQL interview questions and answers (continuously updated)
- Centos7 install mysql5.7 steps (graphical version)
猜你喜欢
Distributed transaction processing solution big PK!
Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
Unity Framework Design Series: How Unity Designs Network Frameworks
12个MySQL慢查询的原因分析
MySQL优化之慢日志查询
DVWA靶场环境搭建
目标检测学习笔记
Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it
MySQL开窗函数
ERP Production Operation Control Kingdee
随机推荐
mysql stored procedure
Input length must be multiple of 8 when decrypting with padded cipher
torch.normal函数用法
ERP Production Operation Control Kingdee
关于小白安装nodejs遇到的问题(npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)
面试官竟然问我怎么分库分表?幸亏我总结了一套八股文
ABC D - Distinct Trio (Number of k-tuples
.NET-9. A mess of theoretical notes (concepts, ideas)
About the problems encountered by Xiaobai installing nodejs (npm WARN config global `--global`, `--local` are deprecated. Use `--location=glob)
STM32 - DMA
MySQL-Explain详解
DVWA installation tutorial (understand what you don't understand · in detail)
centos7安装mysql5.7步骤(图解版)
MySQL优化之慢日志查询
Apache DButils使用注意事项--with modifiers “public“
2022-07-30:以下go语言代码输出什么?A:[]byte{} []byte;B:[]byte{} []uint8;C:[]uint8{} []byte;D:[]uin8{} []uint8。
What are the advantages and disadvantages of Unity shader forge and the built-in shader graph?
Temporal对比Cadence
mysql存储过程
TOGAF之架构标准规范(一)