小冲哥线下课堂


Join the forum, it's quick and easy

小冲哥线下课堂
小冲哥线下课堂
Would you like to react to this message? Create an account in a few clicks or log in to continue.
搜索
 
 

结果按:
 


Rechercher 高级搜索

关键词

最新主题
» 新人来报道了。。。。。。。。。
C语言笔记11--系统的记忆 Empty周日 十月 14, 2012 3:37 pm 由 15178959183

» 新人报道~我不是吐槽贴。。。
C语言笔记11--系统的记忆 Empty周三 五月 16, 2012 5:38 pm 由 萝卜爱喝水

» 课后作业1:编一个程序
C语言笔记11--系统的记忆 Empty周三 五月 09, 2012 11:24 pm 由 廖承启

» C语言初级课堂2--"Hello world"
C语言笔记11--系统的记忆 Empty周六 五月 05, 2012 12:52 am 由 醉之殇

» 新人来报道了。。。。。。
C语言笔记11--系统的记忆 Empty周四 五月 03, 2012 8:50 pm 由 sunquanwen

» 新人报到,字怎样就大了
C语言笔记11--系统的记忆 Empty周三 四月 25, 2012 7:50 am 由 wanghong

» 果断的。来报道啦。。。嘿嘿,我是新手哦
C语言笔记11--系统的记忆 Empty周六 四月 21, 2012 2:41 pm 由 ゛﹏小冲哥ゞ ✿『人事精英』✿李帅

» 指针数组与行指针的异同
C语言笔记11--系统的记忆 Empty周一 四月 09, 2012 3:59 pm 由 *小耳朵*

» 行指针q引用数组元素的方法
C语言笔记11--系统的记忆 Empty周一 四月 09, 2012 3:46 pm 由 *小耳朵*

十一月 2024
周一周二周三周四周五周六周日
    123
45678910
11121314151617
18192021222324
252627282930 

日历 日历

合作伙伴
免费论坛

免費論壇




C语言笔记11--系统的记忆

向下

C语言笔记11--系统的记忆 Empty C语言笔记11--系统的记忆

帖子  *小耳朵* 周二 三月 20, 2012 6:00 am

指针

  指针说白了就是地址。指针变量就是用来存放指针(地址)的变量。


1. 变量的指针和指向变量的指针变量


读起来很拗口,说白了就是变量的地址和用来存放变量地址的地址变量。因为一个变量在编译的时候系统要为它分配一个地址,假如再用一个变量来存放这个地址,那么这个变量就叫做指向变量的指针变量,也就是用来存放变量地址的这么一个变量。所谓"指向"就是指存放××的地址,如指向变量的指针变量,"指向"就是指用来存放变量的地址,再如指向数组的指针变量,"指向"就是指存放数组的地址。只要理解了这个,指针也就不难了。另外,还有指向字符串的指针变量,指向函数的指针变量,指向指针的指针变量等。
1) 指针变量的定义

形式:类型标识符 *标识符 如:int *pointer;

要注意两点:*表示pointer是个指针变量,在用这个变量的时候不能写成*pointer, *pointer是pointer指向的变量。一个指针变量只能指向同一个类型的变量。如上面

pointer只能指向int型变量。


2)指针变量的引用

两个有关的运算符:

& 取地址运算符 &a 就代表变量a的地址

* 指针运算符  *a 就代表变量a的值


2. 数组的指针和指向数组的指针变量


数组的指针指数组的起始地址,数组元素的指针指数组元素的地址。

1)指向数组元素的指针变量的定义与赋值

定义和指向变量的指针变量定义相同,c规定数组名代表数组的首地址,即第一个数组元素地址。

2)通过指针引用数组元素

我们通常引用数组元素的形式是a[i],如果用指针可以这样引用,*(a+i),或定义一个指针变量p,将数组a的首地址赋给p,p=a;然后用*(p+i)引用。

注意:指针变量p指向数组a首地址,则p++指向数组a的下一元素地址,即a[1]的地址。

3)数组名作函数参数

形参数组和实参数组之间并不是值传递,而是共用同一段地址,所以在函数调用过程中如果形参的值发生变化,则实参的值也跟着变化。

4)指向多维数组的指针和指针变量

以二维数组为居多。假设定义了一个二维数组a[3][4],那么

a代表整个二维数组的首地址,也代表第0行的首地址,同时也是第0行第0列的元素的首地址。a +0和a[0]代表第0行首地址,a+1和a[1]代表第一行的首地址。

假设a是一个数组的首地址,那么如果a是一维的,a+I代表第I个元素的地址,如果a是二维的,则a+I代表第I行的首地址。

那么第一行第二列的元素地址如何表示呢?a[1]+2或&a[1][2]或*(a+1)+2。

我们只要记住:在二维数组中a代表整个数组的首地址,a[I]代表第I行的首地址,a[I]与*(a+I)等价就行了。只要运用熟练了就没什么复杂的了。

5)指向由m个整数组成的一维数组的指针变量

如:int (*p)[4],p是一个指向包含4个元素的一维数组,如果p先指向a[0],则p+1指向a[1],即p的增值是以一维数组的长度为单位的,这里是4,举个例子:

假设a[3][4]=,p先指向a[0]也就是数组a的首地址,那么p+1就是a[1]的首地址即元素9的地址,因为在定义p时int (*p)[4],定义一维数组长度为4,所以p+1就等于加了一个一维数组的长度4。


3. 字符串的指针和指向字符串的指针变量


1)字符串的表示形式

c中字符串有两种表示形式:一种是数组,一种是字符指针

char string[]="I love c!";

char *str="I love c!";

其实指针形式也是在内存中开辟了一个数组,只不过数组的首地址存放在字符指针变量str中,千万不要认为str是一个字符串变量。

2)字符串指针作函数参数

实际上字符串指针就是数组的首地址。

3)字符指针变量与字符数组的区别

① 字符数组由若干元素组成,每个元素存放一个字符,而字符指针变量只存放字符串的首地址,不是整个字符串

② 对数组初始化要用static,对指针变量不用。

③ 对字符数组赋值,只能对各个元素赋值,不能象下面这样:

char str[14];

str="I love c!";

对指针变量可以,

char *str;

str="I love c!";

注意:此时赋给str的不是字符,而是字符串首地址。

④ 数组在定义和编译时分配内存单元,而指针变量定义后最好将其初始化,否则指针变量的值会指向一个不确定

*小耳朵*
*小耳朵*
版主
版主

帖子数 : 67
注册日期 : 12-03-16

http://1196631391@qq.com

返回页首 向下

返回页首


 
您在这个论坛的权限:
不能在这个论坛回复主题