C语言中指针是什么?
学习交流可加
微信读者交流①群 (添加微信:coderAllen)
程序员技术QQ交流①群:736386324
恶名昭著的指针究竟是什么
“ 指针是一种保存变量地址的变量,在 C 中频繁地使用。”
“指针类型”其实不是单独存在的,它是由其他类型派生而成的
因为“指针类型”是类型,所以它和 int 类型、double 类型一样,也存在“指针类型变量”和“指针类型的值”。糟糕的是,“指针类型”、“指针类型变量”和“指针类型的值”经常被简单地统称为“指针”,所以非常容易造成歧义,这一点需要提高警惕*
注意:
先有“指针类型”。
因为有了 “指针类型”,所以有了“指针类型的变量 ”和 “指针类型的值”。
指针类型同样如此,既存在指针类型的变量,也存在指针类型的值
因此,几乎所有的处理程序中,所谓的“指针类型的值”,实际是指内存的地址
举个例子:
#include <stdio.h>
int main(void)
{
int hoge = 5;
int piyo = 10;
int *hoge_p;
/*输出每个变量的地址*/
printf("&hoge..%p\n", &hoge);
printf("&piyo..%p\n", &piyo);
printf("&hoge_p..%p\n", &hoge_p);
/*将hoge 的地址赋予hoge_p*/
hoge_p = &hoge;
printf("hoge_p..%p\n", hoge_p);
/*通过hoge_p 输出hoge 的内容*/
printf("*hoge_p..%d\n", hoge_p);
/*通过hoge_p 修改hoge 的内容*/
*hoge_p = 10;
printf("hoge..%d\n", hoge);
return 0;
}
在我的环境下输出:
//Red Hat 4.4.7-17 gcc version 4.4.7
&hoge..0x7ffefe4950ac
&piyo..0x7ffefe4950a8
&hoge_p..0x7ffefe4950a0
hoge_p..0x7ffefe4950ac
*hoge_p..-28749652
hoge..10
因为存在“指针类型”,所以存在“指针类型的变量”和“指针类型的值”。这里输出的“地址”,是指“指针类型的值”
指针变量 hoge_p 保存了另外一个变量 hoge 的地址,我们认为“hoge_p 指向hoge“
变量不一定按照声明的顺序保存在内存中
在指针前面加上*,可以表示指针指向的变量
因为hoge_p 和 hoge 表示同一个事物,通过hoge_p 输出 hoge 的值之外,还可以赋值。在第 22 行,通将 10 赋给*hoge_p,修改了 hoge 的值。在第 23 行输出 hoge 的值,运行结果为 10。
总结:
对变量使用&运算符,可以取得该变量的地址。这个地址称为指向该变量的指针。
指针变量 hoge_p 保存了指向其他变量的地址的情况下,可以说“hoge_p 指向 hoge”。
对指针变量运用运算符,就等同于它指向的变量。如果 hoge_p 指向 hoge,hoge_p 就等同于 hoge
int *hoge_p;
似乎这里声明了一个名为*hoge_p 的变量,而实际上,这里声明的变量是hoge_p,hoge_p 的类型是“指向 int 的指针”。
int* a, b;
声明两个“指向int 的指针”?——其实不是printf("a = %p, b = %d\n",a, b);
int hoge[10];
这本身是不符合 “ 类型 变量名” 的的形式的(C语言就是这样乱的)
Java 在声明“int 的数组”时,通常写成 int[] hoge; 感觉更合理一些
关于main只有这两种形式
int main(int argc, char *argv[]) or int main(void)
更多精彩文章扫码关注 [ Allen有话说 ],专注于编程,职场,英语(外企)

C语言中指针是什么?的更多相关文章
- C语言中指针占据内存空间问题
以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做 ...
- 这样子来理解C语言中指针的指针
友情提示:阅读本文前,请先参考我的之前的文章<从四个属性的角度来理解C语言的指针也许会更好理解>,若已阅读,请继续往下看. 我从4个属性的角度来总结了C语言中的指针概念.对于C语言的一个指 ...
- C语言中指针和数组
C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...
- C语言中指针*p[N], (*P)[N],及**p的区别
在C语言编程中指针经常困扰着我们,但是若能灵活运用指针的话,将会使得我们编程变得更加轻松与高效.这里讲下*p[N], (*P)[N],及**p的区别,这也是之前经常困扰我的地方. 这三者的定义分别为: ...
- 理解C语言中指针的声明以及复杂声明的语法
昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...
- 编程基础-c语言中指针、sizeof用法总结
1.指针 学习 C 语言的指针既简单又有趣.通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的. ...
- C语言中指针和多维数组
指针和多维数组 数组名是特殊的指针 数组是一个特殊的指针,多维数组也是更为复杂的数组,它们的关系是什么样的呢? 我们通过一个简单的例子来比较形象的了解指针和多维数组: int a[2][3]; 这是一 ...
- 对C语言中指针的一些新认识
学C语言这么久了,才发现指针不是想象中那么简单,当初根本就没理解指针怎么用! 变量--是由操作系统自动分配存储空间的 指针--手动分配存储空间或指向已有变量的地址 指针中的内容需要手动释放,而变 ...
- C语言中 指针和数组
C语言的数组表示一段连续的内存空间,用来存储多个特定类型的对象.与之相反,指针用来存储单个内存地址.数组和指针不是同一种结构因此不可以互相转换.而数组变量指向了数组的第一个元素的内存地址. 一个数组变 ...
- C语言中指针中的值赋值给数组
如果把各种语言做个冷兵器类比的话,C语言一定是刀客的最佳工具.入门很简单,但是要是能把它熟练运用,那就是顶尖级别的高手了. 用了那么多年的C语言,发现自己还是仅仅处于熟练的操作工.今天遇到了一个bug ...
随机推荐
- IDEA代码折叠
IDEA代码折叠 觉得有用的话,欢迎一起讨论相互学习~Follow Me 选中内容-->右键 folding -->fold selection/remove region
- PMP 第6章错题总结
项目进度管理的步骤: 1.项目的商业价值指特定项目的成果能够为相关方带来的有形的或无形的效益. 其中有形的效益包括:股东权益.市场份额.货币资产 无形的效益包括:品牌认知度.商誉.战略一致性等2. ...
- Java分布式:分布式锁之数据库实现
Java分布式:分布式锁之数据库实现 分布式锁系列教程重点分享锁实现原理 锁实现原理 创建一张名为methodLock的数据库表,为方法名字段(method_name)添加唯一性约束. CREATE ...
- 二进制安装mysql-5.7.26
一.上传二进制 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz包 #/data 是数据盘 自己根据情况定 [root@VM_0_10_centos data]# ...
- spark sc.textFile() 指定换行符
直接上代码 package com.jason.spark23 import org.apache.spark.sql.SparkSession import org.apache.spark.Spa ...
- 2017ACM/ICPC广西邀请赛 Color it
Color it Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Tota ...
- 【转帖】Infor转型十年启示录:ERP套件厂商为什么要做云平台?
Infor转型十年启示录:ERP套件厂商为什么要做云平台? https://www.tmtpost.com/4199274.html 好像浪潮国际 就是用的infor的ERP软件. 秦聪慧• 2019 ...
- 【Python爬虫案例学习2】python多线程爬取youtube视频
转载:https://www.cnblogs.com/binglansky/p/8534544.html 开发环境: python2.7 + win10 开始先说一下,访问youtube需要那啥的,请 ...
- Kubernetes之动态Jenkins slave
一.前提 本次实践前,需已完成以下过程: 1.搭建好一个Kubernetes集群(本实践为单节点集群),网上参考较多,不赘述. 2.选取kubernetes集群外的一台服务器安装 NFS服务端,并在集 ...
- elasticsearch插件
bigdisk安装: 1.下载地址http://bigdesk.org/,注意和elasticsearch的版本对应关系 2.将文件上传到服务器elasticsearch的plugin目录下,解压 3 ...