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语言里指针的基本概念的更多相关文章

  1. c语言里用结构体和指针函数实现面向对象思想

    一.基础研究 观察如下两个程序a.c和b.c: A.c: B.c: 这两个程序都是要实现在屏幕上第10行40列打印一个绿色的字符c: 这两个程序的数据组织方式是一样的,都是使用结构体,而且对共性和个性 ...

  2. C#委托与C语言函数指针及函数指针数组

    C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用 ...

  3. 用人类社会工程学对C语言中的一些基本概念的剖析与理解

    最近在学C语言程序设计时总是遇到一些概念理解上的不清晰与混乱的地方,在一次偶然间想到了以前看过的一部电影<我是谁,没有一个系统是安全的>,里面的主角用社会工程学的想法结合黑客知识化险为夷, ...

  4. C语言07指针高级

    01内存四区 接口封装和设计思想引导 接口封装设计思想引导 Sckclient客户端api模型设计 第一套api函数 #ifndef _SCK_CLINT_H_ #define _SCK_CLINT_ ...

  5. go语言的指针类型

    一.指针与引用的相关概念 什么是指针? 指针,全称为指针变量,是用来存储内存地址的一种变量.程序中,一般通过指针来访问其指向的内存地址中的内容(数据). 什么是引用? 引用,是C++中提出来的一种新的 ...

  6. 浅谈c语言的指针

    对于非计算机专业的同学,c语言的指针往往就是老师的一句“指针不考“就带过了.c语言的指针号称是c语言的灵魂,是c语言中最精妙的部分. 指针本质上也是变量,也就是一段内存,只是他的特殊之处是他存储的数据 ...

  7. 从汇编来看c语言之指针

    一.基础研究 将下面的程序编译连接,用debug加载: 首先执行第一条语句: 发现p=(unsigned char *)0x1000;在这里是把1000赋给一个偏移地址为01af.大小为两字节的内存空 ...

  8. [原创]C语言里为何会有“2+2=5”的结果

    原文链接:C语言里为何会有“2+2=5”的结果 写这篇原创文章是因为看到了极客中的一篇文章<有趣各种编程语言实现2+2=5>,其中C语言是这样实现的: int main() { ″; // ...

  9. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

随机推荐

  1. EnumRemarkAttribute,获取属性值

    首先自定义一个RemarkAttribute [html] view plain copy using System;  using System.Collections.Generic;  usin ...

  2. 《HelloGitHub》之GitHub Bot

    起因 我在github上发起了一个开源项目:<HelloGitHub月刊>,内容是github上收集的好玩,容易上手的开源项目. 目的:因为兴趣是最好的老师,我希望月刊中的内容可以激发读者 ...

  3. spring mvc fastJson 自定义类型转换(返回数据) 实现对ObjectId类型转换

    json用的alibaba fastJson ValueFilter filter = new ValueFilter() { @Override public Object process(Obje ...

  4. Spring源码解析 - AntPathMatcher

    文章摘要: 1. ant匹配规则 2. PathMatcher接口 3. 通过测试用例看AntPathMatcher的使用 ant匹配规则 AntPathMatcher如名使用的ant 的匹配规则,我 ...

  5. Window memcache 使用

    一.memcache配置 1. 下载memcache 32位系统 1.2.5版本:http://static.runoob.com/download/memcached-1.2.5-win32-bin ...

  6. List的Capacity

    Capacity 在.NET中List的容量应该只是受到硬件限制. 属性Capacity的真正含义,是创建List时给它预分配的容量. 一旦项的数量超过了当前的Capacity,Capacity会以 ...

  7. SQL:实现流水账的收入、支出、本期余额

    有多组数据,分别是收入,支出,余额,它们的关系是:本期余额=上次余额+收入-支出 /* 测试数据: Create Table tbl([日期] smalldatetime,[收入] int ,[支出] ...

  8. [转载]jQuery1.9完全删除live事件

    其实关于live被删除的事件早就在1.7.2版本以后就有通知过了 不过在官方一直提倡使用.on代替.live的过程中 .live事件一直沿用 今天更新了 看下jQuery1.9的相关信息 发现api中 ...

  9. CDN(翻译)

    http://dojotoolkit.org/documentation/tutorials/1.10/cdn/index.html 从CDN上加载dojo模块时非常有用的.从CDN上加载Dojo并同 ...

  10. .NET 开发快捷键大全

    序号 快捷键 说明 1 Ctrl + Tab 切换当前编辑视图 2 Ctrl + Shift + Tab 反向切换当前编辑视图 3 F7 将窗体设计视图转成其代码视图 4 Shift + F7 将代码 ...