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. 模拟discuz发帖的类实现

    一直想弄个discuz的数据采集程序,这2天研究了下discuz发帖涉及的几个数据库表,这里分享一下自己的处理方法. discuz发表主题设计的几个表:(这里列出了主要的几个相关的表) 1.主题表 p ...

  2. EAN

    public static string EAN13(string s) { ;//输入的校验码 if (!Regex.IsMatch(s, @"^\d{12}$")) { if ...

  3. C#Random函数在循环中每次获取一样的值

    首先需要了解一点Random函数的随机生成是和当前时间有关系,如果在短时间生成随机数,就会导致随机数生成出来是相同的. 不过我们可以在每次随机时指定一个Seed种子值,这样在循环里就可以每次获取不一样 ...

  4. 拥抱高效、拥抱 Bugtags 之来自用户的声音(三)

    小编按:这是一篇 Bugtags 用户来稿,主要是介绍了使用 Bugtags 前后对测试及解决 Bug 所带来的变化,感谢山西农业大学 - 高正炎同学对 Bugtags 的信赖和支持.小编在这里诚邀各 ...

  5. 序列化Image到byte[]

    using System.Runtime.Serialization.Formatters.Binary; //引入供序列化Image对象使用 /// <summary>/// 将byte ...

  6. 多个Jdk版本(转)

    window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 安装 ...

  7. Java 多张图片合成一张 drawImage

      package com.yunfengtech.solution.business; import java.awt.Color; import java.awt.Graphics; import ...

  8. Codeforces 730I [费用流]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给两行n个数,要求从第一行选取a个数,第二行选取b个数使得这些数加起来和最大. 限制条件是第一行选取了某个数的条件下,第二行不能选取对应位置的数. ...

  9. Crypto++ RSA从字符串读取公私匙

    string and StringSource (load): string spki = ...; StringSource ss(spki, true /*pumpAll*/); RSA::Pub ...

  10. excel导出字符串

     "style", "vnd.ms-excel.numberformat: @;"