关于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学习之路 转
版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在 ...
- MSSQL-实用小工具
1.创建查询辅助表 create table nums (n int not null) alter table nums add constraint PK_NUMS primary key clu ...
- ORA-00907: 缺失右括号 整理解决
ORA-00907: 缺失右括号 前言 最近在开发过程中使用oracle数据库,在程序中进行查询数据时遇到了“ORA-00907: 缺失右括号”的问题,但是如果直接把sql语句直接在数据库或PL/SQ ...
- asp.net gridview动态添加列,并获取其数据;
1,绑定数据前先动态添加列,见方法CreateGridColumn(只在第一次加载动态添加): 2,gvlist_RowDataBound为对应列添加控件: 前台代码: <%@ Page Lan ...
- Visual Studio Team System 2008 Team Suite(90 天试用版)
安装完成后,在“控制面板”中启动“添加删除程序”,选中Vs2008,点击“更改.删除”,输入序列号:PYHYP-WXB3B-B2CCM-V9DX9-VDY8T
- ASP.NET: 正在中止线程 错误原及解决方法
#[操作记录]:2010-02-23 9:25:12 System.Threading.ThreadAbortException: 正在中止线程. 症状 如果使用 Response.End.Resp ...
- LeetCode "468. Validate IP Address"
it is all about corner-cases... class Solution(object): def validIP4(self, IP): def validNum4(s): tr ...
- Hololens开发笔记之连接PC实现资源共享
官网原文介绍:https://developer.microsoft.com/en-us/windows/holographic/using_the_windows_device_portal Hol ...
- 使用JavaScript的Join方法
在本例中,我们将创建一个数组,然后把它的所有元素放入一个字符串: <script type="text/javascript"> var arr = new Array ...
- windows系统下简单nodej.s环境配置 安装
国内目前关注最高,维护最好的一个关于nodejs的网站应该是http://www.cnodejs.org/ windows系统下简单nodejs环境配置. 第一步:下载安装文件 下载地址:官网 htt ...