C语言——复杂数据类型(数组、字符串、指针)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、数组
1、书足足,从字面上看,就是一组数据的意思,数组就是用来存储一组数据的。
2、数组的特点
1)。只能存放一种类型的数据,比如int类型的数组、float类型的数组。
2)、里面存放的数据称为“元素”。
3、数组的定义
1)、声明数组的类型个
2)、声明数组元素的个数
4、格式
元素类型 数组名【元素个数】;
比如:
int ages【3】;
5、简单使用
简单初始化:int ages【5】={19,19,20,21,25}
元素有顺序之分,每个元素都有一个唯一的下标(索引),从开始
数组元素的访问:a【i】
6、初始化
初始化方式
int a【3】={10,9,6};
int a[3] = {10,9};
int a[] = {11, 7, 6};
int a[4] = {[1]=11,[0] = 7};
二、内存分析
1、数组存储空间的大小
存数空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)
数组名的作用,查看元素地址
驻足越界的注意
2、其他使用
数组与函数参数
数组元素作为函数参数
数组作为函数参数(sizeof注意)
遍历数组元素
两种方式遍历(while循环和for循环)
遍历元素值和元素地址
字符数组的使用
三、二维数组
1、int ages[3][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语言中非常重要的数据类型
2、void change(int n)函数调用完毕后,改变参数的值
分析:修改实参的值–》找到存储空间–》地址
3、指针变量的定义
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=20;
float *p=&a;

#include
int main ()
{
/*
int a =90;
change(&a);
printf(“a=%d\n,a”);
*/
//变量类型 变量名;
//格式:变量类型 *变量名;
//定义了一个指针变量 p
//指针变量只能存储地址
//指针就以一个作用:能够根据一个地址值,访问对应的存储空间,并且可以进行修改存储
//指针变量P前面的int:指针变量p只能指向int类型的数据
int *p;
int a=90;
//指针变量p指向了变量a
p=&a;
*p=10;// *p指 访问了p所指打的a的存储空间;
a=20;
printf("%d\n",*p);
// printf("%d\n",a);
return 0;
}

4清空指针
p=0;
p=null;

5、指针与数组
1.数组元素的访问方式
数组名【下标】 ages[i]
指针变量名[下标] p[i]
*p(p+i)
2.指针变量的+1,究竟加多少,取决于指针的类型
int *4
char *1
double *8

int main ()
{
double d=10.8;
double *dp;
dp=&d;
printf(“dp=%p\n”,dp);
printf(“dp+1=%p\n”,dp+1);

int ages[5]={10,9,8,67,56};
int*p;
//指针变量p指向了数组的首元素
p=&ages[0];
//数组名就是数组的地址,也是数组首元素的地址
//p=ages;

/*
p---->&ages[0]
p+1------>&ages[1]

p+i------>&ages[i]
/
for(int i=0;i<5;i++)
{
printf(“ages[%d]=%d\n”,i,
(p+i));
}
//printf("%p\n",p);
//printf("%p\n",p+1);
//printf("%p\n",p+1);
return 0;
}
6.指针与字符串
char s[]=“mj”;
char *s=“mj”;
或者
char *s;
s=“mj”;
两种定义方式的区别
7.返回指针的函数
指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的
返回指针的函数的 一般形式为:
类型名 *函数名(参数列表)
8.指向函数的指针
函数作为一段程序,在内存中也要占据部分存储空间,它也有一个起始地址,即函数的入口地址.我们的指针变量就是用来存储地址的.
函数名就代表着函数的地址.
指向函数指针的定义
函数的返回值类型
(*指针变量名)(形参1,形参2…);
double(p)(double,char,int);
p=haha;
或者
double(p)(double,char,int)=haha;
使用注意
1>.由于这类指针变量存储的是一个函数的入口地址,所以对它们作加减运算(p++)是无意义的
2>.指向函数的指针变量主要有两个用途:
调用函数
将函数作为参数在函数间传递

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值