C语言基础复习笔记(一)指针

最近linux很火,年前对linux再详细了解了个大概,结合在windows平台活跃与强大无比的C++,最终得出一个结论:C语言依然强大。

过年回来,便对的C语言充满了兴趣,于是乎去网上下载了教程回来,细细研读,基础编程思想始终是很重要的。

首先,入手的便是C语言的核心精华部分,指针。要理解指针就要一步步理解下面的点:

1.       我们所使用的内存单元在物理上线性的,所以内存地址也是一系列连续的,每个内存单元都有一个固定的,不会被修改的地址。

2.       定义一个变量,编译系统就会为该变量分配相应的内存单元,这就意味着每个变量在内存都会有固定的、具体的地址,当然数据类型不同的变量所占据的内存单元数目也不相同。

3.       一个地址唯一指向一个内存变量,这个地址就是指针,然后用来存放这个地址的变量就是指针变量了。指针变量其实也就是一个变量,用了保存地址作用的。

设一组指针变量p ap bp xp yp mp c h 1p c h 2,分别指向上述的变量 abxymc h 1c h 2,指针变量也同样被存放在内存,二者的关系如图 6 - 2所示:

 

4.       关于运算符:

&运算符:取地址运算符,&m即是变量m的地址。

*运算符:指针运算符,*pa即是表示其所指向的变量。

Int *pa;

Float *pb;

Char *px;

定义了3个指针变量,pa指向了一个整型变量,pb指向了一个实型变量,px指向了一个字符型变量。也就是说,papbpx分别存放了整型变量、实型变量、字符型变量的地址。

Int m=3 ;

Float f=4.5 ;

Ch=’a’ ;

我们进行操作:

Pa=&m;

Pb=&f;

Px=&ch;

上述操作表示,将变量m的地址赋给指针变量pa;将变量f的地址赋给指针变量pb;将变量ch的地址赋给指针变量px

*指针变量,其含义是指针变量所指向的值。

p=&a;  则称p指向变量a,或者说p具有了变量a的地址。

在以后的程序处理中,凡是可以写& a的地方,就可以替换成指针的表示pa就可以替换成为* p

 

指针与数组

 

1.       定义一维数组,在内存也有系统分配的存储空间,数组名就是数组在内存的首地址(a[10]a

2.       数组名数组的首地址,也就是数组的指针。

3.       定义一个指针变量,并将数组的首址传给指针变量,则该指针就指向了这个一维数组。

int  a[10] ;  

int  *ptr ;          /* 定义数组与指针变量*/

做赋值操作:ptr=a; p t r = & a [ 0 ] ;

a是数组的首地址,&a[0]是数组元素a[0]的内存地址,a[0]地址就是数组的首地址

1)       ptr+na + n表示数组元素a [ n ]的地址,即&a[n]

2)       * ( p t r + n )* ( a + n)就表示为数组的各元素即等效于a [ n ]

4.       指向数组的指针变量也可用数组的下标形式表示为 p t r [ n ],其效果相当于* ( p t r + n )

5.       *ptr++所表示的意义。

*ptr表示指针所指向的变量;ptr ++表示指针所指向的变量地址加1个变量所占字节数。

指向整型变量,则指针值加 2,若指向实型,则加4,依此类推。

 

 

指针与二维数组

定义一个二维数组:int a[3][4];

其中a是二维数组的首地址, & a [ 0 ] [ 0 ]既可以看作数组00列的首地址,同样还可以看作是二维数组的首地址,a [ 0 ]是第0行的首地址,当然也是数组的首地址。

我们就可以把二维数组看成是由 n行一维数组构成,将每行的首地址传递给指针变量,行中的其余元素均可以由指针来表示。

对指针法而言,程序可以把二维数组看作展开的一维数组:

 

猜你喜欢

转载自blog.csdn.net/achan2090/article/details/6199335