C语言-->(十一)指针于数组

知识点:
• 指针与变量 (指向变量的指针)
• 指针与函数 (地址传递)
• 指针与数组 (指向数组的指针)
• 指针与字符串

=================================
数组的指针

1.什么是数组指针
1)数组的指针是指数组在内存的的起始位置
2)数组的第一个元素和数组的起始地址一致

2.数组名的本质
1)数组名本质上是一个地址常量,代表的是数组的首地址也就是第一个元素的地址

数组名表示表示数组的起始地址,不表示整个数组,不能对数组整体赋值。

3.数组名为一个指针常量,可以当作一个指针来使用
有起始地址和下标可以计算对应的元素地址

4.数组的另外一种访问方式
eg:
1)回忆数组的下标访问特定元素
2)如何通过指针方式打印指定元素
3.交换第一个元素和最后一个元素的值
练习:
1.通过循环遍历出所有的元素
2.通过scanf对所有元素进行赋值

==============================
指向数组的 指针变量

1.什么是指向数组的指针
保存数组地址的指针变量
2.声明方式
1)指向一维数组的指针

3.指向数组的指针变量本质
1>本质仍然为一个变量,保存一个变量的指针,只不过现在保存的是一个数组的首地址

4 .如何通过指向数组的指针变量来操作数组
1)如何获取元素
1>两种方式:下标法,指针运算法
下标法:和数组使用方式一样,着重了解指针和数组的操作类似
指针运算法:通过对首地址的偏移实现

5.指针运算
指针变量和普通变量一样可以执行+-*/四则运算,+-表示所指向的位置向左右移动,*/没有意义。

1).指针变量的加减操作
思考:指针+1后加了多少
练习:声明一个指向char的指针,输出+1后的地址

2).思考:*(p+1)和*p+1的区别

3).指针的关系运算

4).思考:
指向数组的指针的算术运算才有意义表示什么? 单独的指针运算是否有意义?

5).数组名和指针变量的区别
1>数组的名称是数组的首地址,一旦数组确立,其地址是固定不变的
2>指针变量则是一个拥有内存空间的变量,可以反复赋值

可以通过数组指针++ -- 偏移指向数组的指针变量遍历数组

练习:
1.通过指向数组的指针完成元素的遍历(两种方式都要) 5
2.通过scanf对所有的元素进行赋值操作
3.通过指向数组的指针计算数组所有元素的和

6.作用
1)指向数组的指针一般出现在函数参数中,用来表示接收数组实参数

==============================
数组参数
实现一个遍历数组的函数模块

1.数组参数的表示方式
sizeof(a)/sizeof(a[0])

1)普通数组的形式func(int a[5]); // func(int a[]);
2)指针的形式 func(int *a)

2.思考:能否直接在函数内求出数组的大小,如果不能,请说明
func(int a[5]);

3.数组作为参数传递
1)本质
当数组作为参数传递时,是以地址方式进行传递
思考:地址传递意味这什么?
2)原因
减少无用的数据拷贝
3)完整的参数列表
1>要接收的数组类型
2>接收数组的长度大小,这个必须由调用者传递
练习:
1.设计一个函数,将一个数组的内容填写至另一个数组
void copy_arr(int *a1, int *a2, int len); 5
以下练习均以指针操作

============================
指针与字符串
1>如何通过指针变量引用一个字符串
2>通过此种引用方式的特点

1.指向字符数组的指针
1)指向一个字符数组
练习:以下练习均以指针完成
1>编写一个函数,使用指针将字符串中的大写改为小写
2>编写一个函数,使用指针统计字符个数

2.指针指向的字符串

2)字符串常量
1>能否直接修改元素的内容
2>修改后的结果
3>本质:指针直接引用的字符串为一个常量,称为字符串常量

时间: 2024-10-13 21:58:39

C语言-->(十一)指针于数组的相关文章

C语言中指针和数组

C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之自信,总认为自己是天选之人,明知山有虎,偏向虎山行,直到最后用C的人都要被指针虐一遍. 指针 首先,明确一个概念,指针是什么,一旦提到这个老生常谈且富有争议性的话题,那真是1000个人有1000种看法. 在国内的很多教材中,给出的定义一般就是"指针就是地址",从初步理解指针的角度来说,这种

C语言使用指针表示数组的注意事项

1)数组名是指针常量 如对指针变量可以进行++运算,但是对数组名却不允许,另外,对数组名的赋值运算也是错误的 2)注意指针变量的当前值 指针变量的值在程序运行过程中可能经常改变,要对此注意 3)数组越界 C语言系统是不检查数组越界的,需要程序员自行检查 4)深入理解++和-与指针变量的结合 p++是指把指针位置增加一个单元,此时表达式的值仍为p,p的值增加 *(p++)是指读取(p++)地址的值 (*p)++是指把p指向的内存单元的值加1 同2 ++p与1类似,不过表达式的值为增加后的p *(+

c语言之指针与数组

考虑该例子: int calendar[12][31]; 该语句声明了calendar是一个数组,该数组拥有12个数组元素,其中每个元素都是一个拥有31个整型元素的数组(而不是反过来理解).因此,sizeof(calendar)的值是12*31=372与sizeof(int)的乘积.如果calendar不是用于sizeof的操作数,而是用于其他的场合,那么calendar总是被转换为一个指向calendar数组的起始元素的指针.要理解上面这句话的含义,就得先理解有关指针的一些细节. 任何指针都是

【指针篇】C语言:指针与数组的区别,数组指针与指针数组的剖析。

指针就是指针,指针变量在 32位系统下,永远占 4  个byte ,其值为某一个内存的地址.指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到. 数组就是数组,其大小与元素的类型和个数有关.定义数组时必须指定其元素的类型和个数.数组可以存任何类型的数据,但不能存函数. 说起指针,就让我们想到数组.而数组和指针也是有区别的.指针,指的是描述一个变量的地址:我们可通过指针的偏移来指向下一个地址.数组,是描述相同元素的一个集合:数组名是常量地址,不可自加不可修改. 我们可以通过数组的下

C语言通过指针对数组元素进行排序

// //  main.c //  Pointer_array // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:使用指针的指针输出字符串.首先要使用指针数组创建一个字符串数组,然后定义指向指针的指针,使其指向字符串数组,并使用其输出数组中的字符串.同时对数组中的内容进行升序排序. #include <stdio.h> #include<string.h

【c语言】指针实现数组元素的移位

方案一.显示上移位,实际不发生移位.. #include<stdio.h>#include<math.h>void main(){    int a[10],i,*p,n;    n=4;    srand(time());    printf("数组:");    for(i=0;i<10;i++){        a[i]=rand()%100;        printf("%-4d",a[i]);    }    printf(

程序设计基石与实践之C语言指针和数组基础

英文出处:Dennis Kubes:  <Basics of Pointers and Arrays in C>. 关于C语言中指针和数组的争论就像是一场恶战.一方面,有些人觉得,所有人都必须承认指针与数组是不同的.而另一些人则认为数组被当成指针来处理,因此它们不应该有什么区别.这种现象让人迷惑.然而,这两种说法其实都是正确的. 数组不是指针,指针也不能说是数组.在C语言中,指针仅在内存中代表一个地址,而数组是许多连续的内存块,多个类型相似的元素存储在其中.更深入的解释,请参考我之前的博文&l

C++指针与数组

对数组地址的理解,如 int c[2] = {2,3}; int(*cp)[2] = &c; cout << &c[0] << c << cp << endl; 输出都是一样的..结论:当对数组用&比如&c,那么意思就是“对数组取地址或者取得数组的地址”,而数组的地址返回的就是第一个元素的地址,加上数组名本身也是一个指针,故c与&c会有一样的结果. 本版讨论很多对于C语言中指针和数组的认识和看法,下面是我自己对指针的一

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type