关于C语言里指针的基本概念
C是很强大的一门语言,然而C语言的强大并不是强大在他的语法和“.h”文件,而是指针。
对指针通用的认知都是:指针是指向内存地址的一个变量。对于这句话,我是这么理解的:核心有两点,第一个是“指向内存地址”,第二个是“一个变量”。在继续写下去之前,我们来看一下指针的定义:
//定义一个整形指针p,定义一个变量a,并且给a赋值a=1
int *p;
int a=1;
printf("a=%d\n",a);
//取a的地址
p=&a;
printf("%p\n",p);
//通过地址改变a的值
*p = 2;
printf("a=%d",a);
这段代码编译后输出的结果是1,一段十六进制码,2。在这里我首先定义了一个指针p,此时的p是一个变量,然后我定义了一个变量a,并给a赋值为1,此时的a就已经被分配了一段内存,并且把a的值放进了这段内存里面。这样第一个printf就打印出了a的值;接下来我用指针p取a的地址,存放a的那段内存的地址就被赋给了变量p(p虽然是一个指针,但是同时也是一个变量,只不过定义成了指针后,p就可以存放地址了),所以第二个printf打印出来的是p的值,既存放a的内存的地址;接下来就有问题了,*p是什么?为什么第三个printf输出的是2?我刚接触到的时候也是在这里犯迷糊。其实这个*p就是a的值。*p=2和a=2是一样的。我们注意这段代码里面的两个“*”,第二行的“*”是定义指针用的,就是告诉电脑,这个p是一个指针。第九行的“*”可以看做表达式,就是告诉电脑这里的“*p”表示的是p这个指针所指示的内存地址上存放的变量的值是“=”右边的东西,或者直接把这个“*”理解成要重新给p所指向的内存中的变量赋值。
这是指针最基本的概念,理解了基本的概念之后,对后面关于指针的东西会更容易上手,比如Objective-C这种面向对象的语言,当然指针不止这么一点概念,还有像对数组的操作,各种基本类型的指针,函数指针,指针的指针等,还有指针对于内存的操作等。理解这些的核心就是要首先理解指针。
关于C语言里指针的基本概念的更多相关文章
- c语言里用结构体和指针函数实现面向对象思想
一.基础研究 观察如下两个程序a.c和b.c: A.c: B.c: 这两个程序都是要实现在屏幕上第10行40列打印一个绿色的字符c: 这两个程序的数据组织方式是一样的,都是使用结构体,而且对共性和个性 ...
- C#委托与C语言函数指针及函数指针数组
C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...
- 用人类社会工程学对C语言中的一些基本概念的剖析与理解
最近在学C语言程序设计时总是遇到一些概念理解上的不清晰与混乱的地方,在一次偶然间想到了以前看过的一部电影<我是谁,没有一个系统是安全的>,里面的主角用社会工程学的想法结合黑客知识化险为夷, ...
- C语言07指针高级
01内存四区 接口封装和设计思想引导 接口封装设计思想引导 Sckclient客户端api模型设计 第一套api函数 #ifndef _SCK_CLINT_H_ #define _SCK_CLINT_ ...
- go语言的指针类型
一.指针与引用的相关概念 什么是指针? 指针,全称为指针变量,是用来存储内存地址的一种变量.程序中,一般通过指针来访问其指向的内存地址中的内容(数据). 什么是引用? 引用,是C++中提出来的一种新的 ...
- 浅谈c语言的指针
对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...
- 从汇编来看c语言之指针
一.基础研究 将下面的程序编译连接,用debug加载: 首先执行第一条语句: 发现p=(unsigned char *)0x1000;在这里是把1000赋给一个偏移地址为01af.大小为两字节的内存空 ...
- [原创]C语言里为何会有“2+2=5”的结果
原文链接:C语言里为何会有“2+2=5”的结果 写这篇原创文章是因为看到了极客中的一篇文章<有趣各种编程语言实现2+2=5>,其中C语言是这样实现的: int main() { ″; // ...
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...
随机推荐
- Android应用内存泄漏的定位、分析与解决策略
什么是内存泄漏 对于不同的语言平台来说,进行标记回收内存的算法是不一样的,像 Android(Java)则采用 GC-Root 的标记回收算法.下面这张图就展示了 Android 内存的回收管理策略( ...
- k8s DNS 服务发现的一个坑
按照官当文档,以及大家的实践进行k8s dns 服务发现搭建还是比较简单的,但是会有一个因为系统默认dns 配置造成的一个问题 1. linux 默认dns 配置在 /etc/resolv.conf ...
- Sublime Text 注册码 License Key
Sublime Text (3103版本可用) 注册码 License Key
- virtualbox 使用USB引导启动安装系统
想要测试u盘系统引导有没有问题,从u盘中启动我烧录的Android x86系统. 这种方式可以在已有空的虚拟机上直接启动U盘中的系统. 百度上能搜到的方式都是使用CMD命令(懒人表示太麻烦--),so ...
- 将页面打印成excel
在servlet中调用 try { File fileWrite = new File("D:/Write.xls"); fileWrite.createNewFile(); Ou ...
- MyEclipse、Eclipse复制web项目
假设现在已经有一个Java Web项目 ProjectA,现在想做另外一个项目ProjectB,它里面绝大部分功能和结构都可以复用ProjectA中的: 我们就可以通过复制项目的方法来做,具体步骤如下 ...
- 坑的可以呀re
.findall() 直接匹配字母和数字 元字符:. ^ $ * + ? {} [] () \ import re print(re.findall("alex"," ...
- github代码集合(转载)
菜鸟新闻项目课程源码 https://github.com/yxs666/cniao5-news SwipeRefreshLayout + RecyclerView 下拉刷新和上拉加载更多 http ...
- Js中JSON数据交换使用总结
Json格式简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是JavaScript原 ...
- jquery分页插件
css代码: /*分页*/ .pageList { clear: both; overflow: hidden; } .pageList a, .pageList span { border: 1px ...