数组,字符串,指针

  • Post author:
  • Post category:其他




数组


一、 数组的基本概念


一个

int


类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢?


1. 什么是数组


数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的


2. 数组的特点


只能存放一种类型的数据,比如

int


类型的数组、


float


类型的数组


里面存放的数据称为“元素”



二、 数组的定义


1. 定义


声明数组的类型


声明数组的元素个数(需要多少存储空间)


2. 格式


元素类型 数组名

[


元素个数


];


比如:

int ages[3];


3. 简单使用


简单初始化:

int ages[5] = {19, 19, 20, 21, 25};


元素有顺序之分,每个元素都有一个唯一的下标(索引),从

0


开始


数组元素的访问:

a[i]


4. 初始化


初始化方式


int a[3] = {10, 9, 6};


int a[3] = {10,9};


int a[] = {11, 7, 6};


int a[4] = {[1]=11,[0] = 7};


常见错误


int a[];


int[4] a;


int a[b];


a = {10, 11};


a[4] = {10,9,8,5};


5. 内存分析


数组存储空间的大小


存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)


数组名的作用,查看元素地址。



三、 二维数组


1. 什么是二维数组


一个数组能表示一个班人的年龄,如果想表示很多班呢?


什么是二维数组?

int ages[3][10];


三个班,每个班


10


个人


相当于

3





10





相当于装着

3


个一维数组





二维数组是一个特殊的一维数组





它的元素是一维数组

。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素




2. 存储


存储大小


存储结构和顺序


存储地址问题



3. 初始化


int a[3][4] = {1,2,3,4,5,6};


int a[3][4] = {

{},{},{}};


数组元素简单访问


int a[][5] = {3,21,31,2,32,1};


注意错误:



int

a[

3

][

4

];


a[

3

] = {};



4. 遍历


遍历所有的元素


遍历地址


使用场合:五子棋、俄罗斯方块




四、 字符串


1. 什么是字符串


简单的字符串”itcast”


一个’i’是一个字符


很多个字符组合在一起就是字符串了


2. 字符串的初始化


char a[] = “123”;




char a [] = {


‘1’,’2’,’3’};

的区别,可以比较大小


“123”其实是由’1’、’2’、’3’、’\0’组成


“123”的存储分布


字符串的输出”%s”,’\0’是不会输出的


3. \0

的作用



输出

char a[] = {


‘o’,’k’};




char a[]


前面搞个

”mj”


输出”mj”


再输出

a


char a[] = {‘i’,’t’,’\0’,’c’};


4. 常用字符串处理函数


strlen

(注意中文)


五、 字符串数组


1.

使用场合



* 一维字符数组中存放一个字符串,比如一个名字

char name[20] = “mj”


*

如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,


char names[15][20]


可以存放


15


个学生的姓名


(


假设姓名不超过


20


字符


)


*

如果要存储两个班的学生姓名,那么可以用三维字符数组


char names[2][15][20]


2.

初始化




char

names[

2

][

10

] = { {


‘J’

,

‘a’

,

‘y’

,

‘\0’

}, {


‘J’

,

‘i’

,

‘m’

,

‘\0’

} };



char

names2[

2

][

10

] = { {


“Jay”

}, {


“Jim”

} };



char

names3[

2

][

10

] = {

“Jay”

,

“Jim”

};





指针


一、 指针前奏


1. 指针的重要性


指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言。


2. 小需求


void change(int  n)

函数调用完毕后,改变实参的值


分析:修改实参的值

->


找到存储空间


->


地址



二、 指针变量的定义


1. 定义的格式


类名标识符

*

指针变量名;


int *p;


2. 先定义后赋值


简单取值


int a = 10;


int *p;


p = &a;


printf(“%d”, *p);


简单改值


*p = 9;


3. 定义的同时赋值


int a = 10;


int *p = &a;


4. 实现修改实参


5. 注意点


int *p;   p = 1000;


int *p;   *p = 100;


int *p;  *p = &a;


%p

输出指针里面存储的地址值


其他指针类型说明,比如

float *p;  char *p;


不能乱用类型,比如

int a = 10;  float *p = &a;


6. 清空指针


p = 0;


p = NULL;



三、 指针实例


1. void swap(char *a, char *b)

(注意


temp=a;  a = b; b = temp;





2. int sumAndMinus(int a, int b, int *minus)



四、 指针探究


1. 指针变量所占用的存储空间


2. 为何指针变量要分类型?


int i = 2;


char c = 1;


int *p = &c;


printf(“%d”, *p);




五、 指针与数组


1. 指向一维数组元素的指针


2. 用指针遍历一维数组元素


先遍历

char


数组


(

‘i’,’t’)

,再遍历


int


类型数组


*(p+i)




*(p++)


的区别


a+i




a++


p[0]




p[1]



六、 指针与字符串


1. 字符串回顾


char s[] = “mj”;


2. 其他定义字符串的方式


char *s = “mj”;


或者


char *s;


s = “mj”;


七、 返回指针的函数


指针也是

C


语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的


返回指针的函数的一般形式为:类型名


*


函数名


(


参数列表


)



八、 指向函数的指针


1. 为什么指针可以指向一个函数?


函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址。函数有自己的地址,那就好办了,我们的指针变量就是用来存储地址的。因此,可以利用一个指针指向一个函数。其中,

函数名就代表着函数的地址



2. 指向函数的指针的定义


定义的一般形式:函数的返回值类型

(*


指针变量名


)(


形参


1,


形参


2, …);


3. 使用注意


由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(比如p++)是无意义的


指向函数的指针变量主要有两个用途:


·  调用函数


·  将函数作为参数在函数间传递




版权声明:本文为juanjuan2018原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。