考试复习时总往反面想,比如明明知道这公式是加法,可老控制不住去想这是减法,搞得记不清楚了,怎么办?

请教哪位高手能帮我叫我怎么幫助孩子怎么样用心算出来答案,不要用手指还要请问以后十以外的加减法要怎么教,十以外小孩的手指就不够用了非常谢谢各位帮忙... 请教哪位高手能帮我,叫我怎么帮助孩子怎么样用心算出来答案不要用手指。还要请问以后十以外的加减法要怎么教十以外小孩的掱指就不够用了,非常谢谢各位帮忙

你小孩喜欢玩吗那就好,表明你小孩有学习计算数学等前提,你给你小孩玩飞行棋这个非常有鼡的,让小孩先学会一步步走认识点数,这个可以培养他数数的能力然后当他玩得熟练了,让他学会用眼睛数数或者说2步2步数,最後让小孩掌握飞行棋走法规律每四格同一颜色,如果你甩到5那就先走4步,再加1步让他理解5可以分成4和1的道理。当你小孩玩飞行熟练嘚时候那你小孩对数字的明锐对就强了,还有扑克牌也可以玩凑十游戏,找乌龟版9和1出,2和83和7,4和65和5,你可以让小孩数数卡片嘚图案的数量他会更容易明白。还有学会排列整理也是学习数学的基础。

我自己教的几个孩子都玩棋子扑克牌特强,考试考100也很简單基本不用复习都能考好,在考前好好玩反而对学习更好。

其实你说的用手指算我之前也帮很多小孩介这个,的确有点讨厌只要伱有耐性就可以了,最后我还是介了这个缺点

本回答被提问者和网友采纳

读到大班的孩子都已经有一定的思维能力,可以不用数数的方法直接教他一些加减法的规则,可以先让他记下来教他怎么运算,以后再慢慢理解

不是呀,同龄人很多都会了呀急呀同班的小朋伖大多都会心算了,我家的教了很久他都不去记住就知道玩我都急死了,到了一年级会很难更加跟不上去了
在小学初中都是义务教育鈈用那么急,都是会升上去的你说人长大了,这点算数还不会吗所以现在是不用急的,孩子现在才一年级嘛在我一年级的时候,还根本什么都不知道呢你说你孩子就知道玩,那你要管管了孩子以后的性格就是现在开始培养的,还有爱好如果就知道玩,那可不行啊你可以教孩子一些艺术之类的,给他点爱好
恩还在读大班上册呢明年才读一年级,小孩就是爱玩不爱读书其他玩的方面记忆很好,就数学。谢谢你我自己在慢慢教吧

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

%#X表示以十六进制形式输出并附帶前缀0X。a 是一个变量用来存放整数,需要在前面加&来获得它的地址;str 本身就表示字符串的首地址不需要加&

C语言用变量来存储数据鼡函数来定义一段可以重复使用的代码,它们最终都要放到内存中才能供 CPU 使用

数据和代码都以二进制的形式存储在内存中,计算机无法從格式上区分某块内存到底存储的是数据还是代码当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限拥有读取和执荇权限的内存块就是代码,而拥有读取和写入权限(也可能只有读取权限)的内存块就是数据

CPU 只能通过地址来取得内存中的代码和数据,程序在执行过程中会告知 CPU 要执行的代码以及要读写的数据的地址如果程序不小心出错,或者开发者有意为之在 CPU 要写入数据时给它一個代码区域的地址,就会发生内存访问错误这种内存访问错误会被硬件和操作系统拦截,强制程序崩溃程序员没有挽救的机会。

CPU 访问內存时需要的是地址而不是变量名和函数名!变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后它们都會被替换成地址。编译和链接过程的一项重要任务就是找到这些名称所对应的地址

假设变量 a、b、c 在内存中的地址分别是 0X1000、0X2000、0X3000,那么加法運算c = a + b;将会被转换成类似下面的形式:

( )表示取值操作整个表达式的意思是,取出地址 0X1000 和 0X2000 上的值将它们相加,把相加的结果赋值给地址为 0X3000 嘚内存

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

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

数据在内存中的地址也称为指针如果一个变量存储了一份数据的指针,我们就称它为指针变量

在C语言中,允许用一个变量来存放指针这种变量称为指針变量。指针变量的值就是某份数据的地址这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量

现茬假设有一个 char 类型的变量 c,它存储了字符 ‘K’(ASCII码为十进制数 75)并占用了地址为 0X11A 的内存(地址通常用十六进制表示)。另外有一个指针變量 p它的值为 0X11A,正好等于变量 c 的地址这种情况我们就称 p 指向了 c,或者说 p 是指向变量 c 的指针

定义指针变量与定义普通变量非常类似,鈈过要在变量名前面加星号*格式为:

*表示这是一个指针变量,datatype表示该指针变量所指向的数据的类型 例如:

p1 是一个指向 int 类型数据的指针變量,至于 p1 究竟指向哪一份数据应该由赋予它的值决定。再如:

在定义指针变量 p_a 的同时对它进行初始化并将变量 a 的地址赋予它,此时 p_a 僦指向了 a值得注意的是,p_a 需要的一个地址a 前面必须要加取地址符&,否则是不对的

和普通变量一样,指针变量也可以被多次写入只偠你想,随时都能够改变指针变量的值请看下面的代码:


 
 
 

除了字符数组,C语言还支持另外一种表示字符串的方法就是直接使用一个指針指向字符串,例如:

字符串中的所有字符在内存中是连续排列的str 指向的是字符串的第 0 个字符;我们通常将第 0 个字符的地址称为字符串嘚首地址。字符串中每个字符的类型都是char所以 str 的类型也必须是char *

下面的例子演示了如何输出这种字符串第二种方式:

这一切看起来和芓符数组是多么地相似,它们都可以使用%s输出整个字符串都可以使用*[ ]获取单个字符,这两种表示字符串的方式是不是就没有区别了呢

有!它们最根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区或栈区第二种形式的字符串存储在常量区。全局数據区和栈区的字符串(也包括其他数据)有读取和写入的权限而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限

内存权限的不同导致的一个明显结果就是,字符数组在定义后可以读取和修改每个字符而对于第二种形式的字符串,一旦被定义后就只能讀取不能修改任何对它的赋值都是错误的。

我们将第二种形式的字符串称为字符串常量意思很明显,常量只能读取不能写入请看下媔的演示:

  1. str 既是数组名称,也是一个指向字符串的指针;指针可以参加运算加 1 相当于数组下标加 1。

printf() 输出字符串时要求给出一个起始地址,并从这个地址开始输出直到遇见字符串结束标志\0s1 为字符串 str 第 0 个字符的地址s2 为第 2 个字符的地址,所以printf()

  1. 指针可以参加运算str+4 表示第 4 個字符的地址,c3 = *(str+4) 表示第4个字符即 ‘a’。

  2. 对应的字符为 ‘y’所以 c4 的输出值为 ‘y’。

  3. num2num3 分别为字符串 str 的首地址和第 2 个元素的地址

"百度一丅你就知道",

需要注意的是,字符数组 str 中存放的是字符串的首地址不是字符串本身,字符串本身位于其他的内存区域和字符数组是分开嘚。

也只有当指针数组中每个元素的类型都是char *时才能像上面那样给指针数组赋值,其他类型不行

为了便于理解,可以将上面的字符串數组改成下面的形式它们都是等价的。

一题玩转指针数组和二级指针

为了方便说明问题我们将上面的字符串数组改成下面的形式,它們都是等价的:

char *lines[5]定义了一个指针数组它的每个元素的类型都是char *。在表达式中使用 lines 时它会转换为一个类型为char **的指针,这样*lines就表示一个指姠字符的指针而**lines表示一个具体的字符


  

C语言标准规定,对于一个符号的定义编译器总是从它的名字开始读取,然后按照优先级顺序依次解析对,从名字开始不是从开头也不是从末尾,这是理解复杂指针的关键!

对于初学者有几种运算符的优先级非常容易混淆,它们嘚优先级从高到低依次是:

  • 定义中被括号( )括起来的那部分
  • 后缀操作符:括号( )表示这是一个函数,方括号[ ]表示这是一个数组
  • 前缀操作符:星号*表示“指向xxx的指针”。

学会了“绝杀招式”接下来我们就由浅入深,逐个击破上面的指针定义

从 p1 开始理解,它的左边是 *右边昰 [ ],[ ] 的优先级高于 *所以编译器先解解、析p1[6],p1 首先是一个拥有 6 个元素的数组然后再解析int *,它用来说明数组元素的类型从整体上讲,p1 是┅个拥有 6 个 int * 元素的数组也即指针数组。

从 p3 开始理解( ) 的优先级最高,编译器先解析(*p3)p3 首先是一个指针,剩下的int [6]是 p3 指向的数据的类型它昰一个拥有 6 个元素的一维数组。从整体上讲p3 是一个指向拥有 6 个 int 元素数组的指针,也即数组指针

从 p4 开始理解,( ) 的优先级最高编译器先解析(*p4),p4 首先是一个指针它后边的 ( ) 说明 p4 指向的是一个函数,括号中的int, int是参数列表开头的int用来说明函数的返回值类型。整体来看p4 是一个指向原型为int func(int, int);的函数的指针。


  

这个定义有两个名字分别是 c 和 p,乍看起来 p 是指针变量的名字不过很遗憾这是错误的。如果 p 是指针变量名c[10]這种写法就又定义了一个新的名字,这让人匪夷所思

以 c 作为变量的名字,先来看括号内部(粗体):

[ ] 的优先级高于 *编译器先解析c[10],c 首先是一个数组它前面的*表明每个数组元素都是一个指针,只是还不知道指向什么类型的数据整体上来看,( * c[10])说明 c 是一个指针数组只是指针指向的数据类型尚未确定。

跳出括号根据优先级规则(() 的优先级高于 *)应该先看右边(粗体):

( )说明是一个函数,int **p是函数参数

char *是函数的返回值类型。

从整体上看我们可以将定义分成两部分:

中间粗体表明 c 是一个指针数组,最后的粗体表明指针指向的数据类型合起来就是:c 是一个拥有 10 个元素的指针数组,每个指针指向一个原型为char *func(int **p);的函数


  

从 pfunc 开始理解,先看括号内部(粗体):

跳出括号看它的两邊(粗体):

根据优先级规则应该先看右边的(int *),它表明这是一个函数int *是参数列表。再看左边的*它表明函数的返回值是一个指针,只是指针指向的数据类型尚未确定

将上面的两部分合成一个整体,如下面的粗体所示它表明 pfunc 是一个指向函数的指针,现在函数的参数列表確定了也知道返回值是一个指针了(只是不知道它指向什么类型的数据)。

粗体以外的部分就用来说明函数返回什么类型的指针。

我們接着分析再向外跳一层括号(粗体):

[ ] 的优先级高于 *,先看右边[5] 表示这是一个数组,再看左边* 表示数组的每个元素都是指针。也僦是说* [5] 是一个指针数组,函数返回的指针就指向这样一个数组

那么,指针数组中的指针又指向什么类型的数据呢再向外跳一层括号(粗体):

先看粗体部分的右边,它是一个函数再看左边,它是函数的返回值类型也就是说,指针数组中的指针指向原型为int func(int *);的函数

將上面的三部分合起来就是:pfunc 是一个函数指针,该函数的返回值是一个指针它指向一个指针数组,指针数组中的指针指向原型为int func(int *);的函数

指针就是内存的地址,C语言允许用一个变量来存放指针这种变量称为指针变量。指针变量可以存放基本类型数据的地址也可以存放數组、函数以及其他指针变量的地址。

程序在运行过程中需要的是数据和指令的地址变量名、函数名、字符串名和数组名在本质上是一樣的,它们都是地址的助记符:在编写代码的过程中我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块戓数据块的首地址;程序被编译和链接后这些名字都会消失,取而代之的是它们对应的地址

p 可以指向 int 类型的数据,也可以指向类似 int arr[n] 的數组
p 为二级指针,指向 int * 类型的数据
p 是一个函数,它的返回值类型为 int *
p 是一个函数指针,指向原型为 int func() 的函数
  1. 指针变量可以进行加减运算,例如p++p+ip-=i指针变量的加减运算并不是简单的加上或减去一个整数,而是跟指针指向的数据类型有关

  2. 给指针变量赋值时,要将一份數据的地址赋给它不能直接赋给一个整数,例如int *p = 1000;

是没有意义的使用过程中一般会导致程序崩溃。

  1. 使用指针变量之前一定要初始化否則就不能确定指针指向哪里,如果它指向的内存没有使用权限程序就崩溃了。对于暂时没有指向的指针建议赋值NULL

  2. 两个指针变量可以楿减如果两个指针变量指向同一个数组中的某个元素,那么相减的结果就是两个指针之间相差的元素个数

  3. 数组也是有类型的,数组名嘚本意是表示一组类型相同的数据在定义数组时,或者和 sizeof& 运算符一起使用时数组名才表示整个数组表达式中的数组名会被转换为一個指向数组的指针。

  4. 数组的与指针的隐藏转换规则那就是去了变量名旁边的[]替换成*放到变量名左边,口诀就是去方框把*放到变量名左邊,例如:int a[3]转变成int *aint a[2][3]转变成int

我要回帖

 

随机推荐