首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

新手1分钟彻底理解,C语言编程指针的概念

C语言是面向过程的,而C++是面向对象的

C和C++的区别:

C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。

C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好的东西。

计较机编程中所有的数据都必需放在内存中,不合类型的数据占用的字节数不一样,例如 int 占用4个字节,char 占用1个字节。为了精确地访谒这些数据,必需为每个字节都编上号码,就像门商标、身份证号一样,每个字节的编号是独一的,按照编号可以切确地找到某个字节。

下图是 4G 内存中每个字节的编号(以十六进制表示):

我们将内存中字节的编号称为地点(Address)或指针(Pointer)。地点从 0 起头依次添加,对付 32 位情形,轨范可以使用的内存为 4GB,最小的地点为 0,最大的地点为 0XFFFFFFFF。

下面的代码演示了若何输出一个地点:

#include

int main(){

int a = 100;

char str[20] = "c.biancheng.net";

printf("%#X, %#X ", &a, str);

return 0;

}

运转成效:

0X28FF3C, 0X28FF10

%#X

表示以十六进制情势输出,并附带前缀

0X

。a 是一个变量,用来存放整数,必要在前面加

&

来获得它的地点;str 本身就表示字符串的首地点,不必要加

&

小编给大家推荐一个学习氛围超好的地方,C/C++交流:三四一六三六七二七!一千多小伙伴了吧!所以看到了快点进来吧,不然就满了!里面资料都是大家贡献的,几百个G了!什么PDF,零基础入门,数据结构, 数据分析都是有视频加源码的。而已里面好多学生,工作了的,遇到bug了可以寻求帮助,遇到解决不了的问题也可以和大家交流,从而解决自己多时的问题。这也是一件乐事,我们不做外包,只为共同进步!

通通都是地点

C说话用变量来存储数据,用函数来界说一段可以频频使用的代码,它们终极都要放到内存中才能供 CPU 使用。

数据和代码都以二进制的情势存储在内存中,计较机无法从名目上区分某块内存到底存储的是数据仍是代码。当轨范被加载到内存后,把持体系会给不合的内存块指定不合的权限,拥有读取和实行权限的内存块就是代码,而拥有读取和写入权限(也可能只需读取权限)的内存块就是数据。

CPU 只能经由过程地点来获得内存中的代码和数据,轨范在实行过程中会奉告 CPU 要实行的代码以及要读写的数据的地点。若是轨范不警惕出错,或者开发者成心为之,在 CPU 要写入数据时给它一个代码区域的地点,就会产生内存访谒错误。这种内存访谒错误会被硬件和把持体系拦截,强迫轨范崩溃,轨范员没有救济的机缘。

CPU 访谒内存时必要的是地点,而不是变量名和函数名!变量名和函数名只是地点的一种助记符,当源文件被编译和链接成可实行轨范后,它们都市被替代成地点。编译和链接过程的一项重要使命就是找到这些名称所对应的地点。

假设变量 a、b、c 在内存中的地点分袂是 0X1000、0X2000、0X3000,那么加法运算

c = a + b;

将会被转换成近似下面的情势:

0X3000 = (0X1000) + (0X2000);

( )

表示取值把持,整个表达式的意思是,掏出地点 0X1000 和 0X2000 上的值,将它们相加,把相加的成效赋值给地点为 0X3000 的内存

变量名和函数名为我们供给了便当,让我们在编写代码的过程中可以使用易于阅读和理解的英文字符串,不消直接面临二进制地点,那场景几乎让人崩溃。

必要注意的是,虽然变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地点的助记符,但在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地点。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180208A0684N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券