C语言学习之指针
2024-09-25 22:47:08
指针这块,看了好久才有点头绪,稍微有点理解了。
一、指针申明以及赋值
int *p;
这样就声明了一个int型的指针p,这个p就是指针变量,可能上述的书写方式会混淆我们队指针的理解(*号)
我们可以这样看:
int * p;
int型指针变量---------------------->p;这个*和p分开的话,也是可以解析的。
然后重点来了,这个指针变量赋值的时候只能接受内存地址,对,是内存地址,并且只能是变量计算后的地址(&符计算的内存地址)
int var = ; /* 实际变量的声明 */
int * ip; /* 指针变量的声明 */ ip = &var; /* 在指针变量中存储 变量var 的地址 */
ip = &; /*基本数据类型求地址会报错*/
也就是说指针变量只能存储(接受)栈内存的地址。
对于内存,你只需要知道计算机的内存被编组为“地址-值”这样的关系对。
二、指针值的计算
上面我们知道对于int * ip来说,这个ip是一个只能存内存地址的指针变量,既然地址对应着值,那么这个值怎么求呢?
还是用 * 号,但是此*号不同于变量声明时候的*号,这个*号是取值符, 取出指针所指向地址的值。
int var = ; /* 实际变量的声明 */
int * ip; /* 指针变量的声明 */ ip = &var; /* 在指针变量中存储 变量var 的地址 */ /* 使用取值符*求得指针变量(地址)对应的值 */
printf("Value of *ip variable: %d\n", *ip ); return ;
对于&,就像之前说的那样,放在变量前面:,是取址符, 任何变量都是放在内存中的, 取址符&就是获得变量在内存中地址。
所以,下面两种写法都是错的:
p = var; // Error: 指针变量只能存储地址, 给指针赋值其他类型的数据显然不对
*p = &var //左边*p取值之后是个int型数值,而右边是求址符,是一个内存地址,显然不是一个东西
最新文章
- [c++] Smart Pointers
- HTML语法大全
- oracle 11g如何完全卸载
- 一维Poisson方程计算
- 更快的方式实现PHP数组去重
- TYVJ P1037 阶乘统计2 Label:坑
- 函数参数为int*和int&;的区别
- 关于sql where id in 转换成数据类型 int 时失败(转)
- asp.net自带的异步刷新控件使用
- hdu 1875
- MJExtension框架源码分析
- 201521123104《Java程序设计》第1周学习总结
- python装饰器练习题
- linux-echo
- js相关用法
- python中逻辑运算符“+”的特殊之处
- python 函数的定义及传参
- Android学习之Android studio TraceView和lint工具的使用具体解释
- Android ——VideoView禁止";无法播放该视频";弹窗
- sql server查询数据库的大小和各数据表的大小
热门文章
- mouseleave mouseout时候悬浮框不应该消失的时候消失了 css 解决办法
- CentOS 64位系统 yum安装32位软件包的方法
- spring cron表达式及解析过程
- git分支合并脚本
- Spring Boot 中yml配置文件
- How To Use Coordinates To Extract Sequences In Fasta File
- 【尺度不变性】An Analysis of Scale Invariance in Object Detection – SNIP 论文解读
- Springcloud/Springboot项目绑定域名,使用Nginx配置Https
- zoom:1;
- js 图片查看器