学习笔记——C语言基本概念&数组(一维数组)——(5)

一、回顾

        在开始今天的学习之前,让我们回顾一个概念,什么概念了,那就是地址。

用具体的事例说明进行讲解:

1->int num=0;//定义一个整形变量,变量名为:num

scanf("%d",&num);

&:取地址符;那这个取取地址符号如何查看地址了?

        当选择一个数据类型并定义变量名,计算机会为变量名分配空间,比如定义的 int  num整形对应四个字节一个字节是八位也就是说计算机会给num分配32为的空间,那么如何查看其地址空间了?

2->地址对应的格式控制符:%p

解释:%p 打印地址: 打印的是首地址
举个例子:

代码:

#include<stdio.h>
int main()
{
	int num=0;
	printf("num的地址是:%p\n",&num);
	
	return 0;
}

变量的类型: 去掉变量名, 剩下的所有就是该变量的数据类型。

让我们再回顾一下专门用来求数据类型大小的运算符:sizeof()。

举个例子:
        double num = 3.14;
        sizeof(double): 8 字节
        sizeof(num): 实际求的依旧是 num 的数据类型的大小, 还是 double 的大小,是 8 字节。

二、数组

目的:
        批量定义若干个类型相同的元素;
特点:
        1》 定义若干个类型相同的元素
        2》 数组的元素地址空间连续
        3》 数组名是数组的首元素地址, 也是整个数组的首地址;

关于数值的空间连续性举个例说明:

#include<stdio.h>
int main()
{
	int num[6]={1,2,3,4,5,6};
	printf("num=%p\n",num);
	printf("&num=%p\n",&num);
	for(int i=0;i<6;i++)
	{
		printf("&num[%d]:=%p\n",i,&num[i]);
	}
	return 0;
}

输出结果为:

定义:

        数据类型 变量名[元素个数];

数据类型: 元素的数据类型
变量名: 符合标识符命名规则即可
整个数组的数据类型:数据类型 [元素个数]
元素个数: 必须是常量
整个数组的大小=元素的数据类型大小*元素个数;

= sizeof(数据类型 [元素个数]);
=sizeof(变量名);
元素个数=整个数组的大小/元素的大小;


举例:
        int num[10];//定义 10 个 int 类型的元素 整型数组;
        元素的数据类型: int;
        整个数组的数据类型(num 的数据类型): int [10]
        整个数组的大小(num 的大小):4*10=40

        char buf[32]; 字符型数组
        元素的数据类型(buf[0]): char
        整个数组的数据类型( buf 的数据类型) :char [32]
        整个数组的大小: 1*32 = 32;
        sizeof( char [32]) == 32
        sizeof(buf) : 32

        double num[6]; 浮点型数组
        元素的数据类型: double
        整个数组的数据类型( num 的数据类型) :double [6]
        整个数组的大小: 6*8 = 48;
        sizeof( double [6]) == 48
        sizeof(num) : 48

使用:

2.1取元素

格式: 变量名[下标];
                下标: 距离首元素的偏移量;
                下标的范围: 0 到 数组的元素个数-1

数组的初始化(定义+赋值):

2.1.1、完全初始化,依次赋值。

int num[6] = {11,22,33,44,55,66};

#include <stdio.h>
int main()
{
	int num[6]={11,22,33,44,55,66};
	int i=0;
	for(i=0;i<=5;i++)
	{
		printf("num[%d]=%d\n",i,num[i]);
		
	}
	
	 return 0;
}

运行结果。

2.1.2、部分初始化

部分初始化:, 依次赋值, 剩下的默认赋值为 0

int num[6]={11,22};

#include <stdio.h>
int main()
{
	int num[6]={11,22};
	int i=0;
	for(i=0;i<=5;i++)
	{
		printf("num[%d]=%d\n",i,num[i]);
		
	}
	
	 return 0;
}

运行结果:

2.1.3、省略数组元素个数的初始化: 一定是完全初始化


int num[] = {11, 12, 6, 8, 9, 1, 3, 5, 6, 7, 8, 6, 6};
元素个数=数组大小/元素大小
即元素个数 = sizeof(num)/sizeof(num[0]);

2.2数组的应用:冒泡排序--从大到小

int num[6] = {2,8,6,3,1,7};
2 8 6 3 1 7
8 2 6 3 1 7
8 6 2 3 1 7
8 6 3 2 1 7
8 6 3 2 1 7 第 1 轮, 比较 6-1 次

在这里就展示一轮其他的同理:
代码:

#include <stdio.h>
//冒泡排序 
int main()
{
	int i,num[6] ={1,2,3,4,5,6};
	int j,tmp;
	for (i=1;i<6;i++)
	{
		for(j=0;j<6-i;j++)
		{
			if(num[j]<num[j+1])
			{
				tmp = num[j];
				num[j]= num[j+1];
				num[j+1]= tmp;
				}	
		}
		
	}
	for(i=0;i<6;i++)
	{
		printf("num[%d]=%d\n",i,num[i]);
	}
	return 0; 
}

三、字符型数组定义和使用

        char buf[32];//字符型数组
        数组名: buf
        buf 的数据类型: char [32];
        buf[0]的数据类型, 即元素的数据类型:char
        sizeof(buf) = 32 字节
        sizeof(buf[0]) = 1 字节


①用字符串初始化字符型数组:


字符串: “ hello” - ‘ h’ ,‘ e’ ,‘ l’ ,‘ l’ ,‘ o’ ,‘ \0’
char buf[32] = {“ hello” };
buf[0]=‘ h’ ,buf[1]=‘ e’ ,buf[2]=‘ l’
buf[3]=‘ l’ ,buf[4]=‘ o’ ,buf[5]=‘ \0’
buf[7],,,,,buf[32] = 0
0 -- ‘ \0’


②从键盘输入:
        %s -- 字符串的格式控制符
        char buf[32] = {0};
        scanf(“ %s” ,buf);//%s 后面对应的输入列表是数组名(数组名是一个地址)
        %s: 表示从键盘接收一个字符串, 空格和回车表示输入的完成;
        //终端: hello
        buf[0]=‘ h’ ,buf[1]=‘ e’ ,buf[2]=‘ l’
        buf[3]=‘ l’ ,buf[4]=‘ o’ ,buf[5]=‘ \0’
        printf(“ %s” ,数组名); %s: 遇到’ \0’ 停止打印

        scanf 和%s 结合, 不能接收空格, 引入新的函数 gets:
               格式: gets (数组名);//数组名必须对应字符型数组
                功能: 从键盘接收一个字符串, 仅仅遇到回车表示获取完成
                格式: puts(数组名);
                功能: 将数组中的内容, 打印到屏幕上, 遇到’ \0’ 停止打印;

文章最后留一个小题感兴趣的可以试一下,看看如何用数值实现:
1、 按以下规律翻译密码:
将每一个字母变成它后面的字母, 例如, 将 A 变成 B, B 变成 C, …, Z 变
成 A, 非字母字符不变, “ !” 作为电文结束标志。

 

今天的博文到此为止,依旧分享一张图片。

  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值