Linux C 数组和指针

数组和指针

重点:

    数组的基本概念、定义及使用方法;

    字符串的深入理解及相关字符串操作库函数;

    指针的基本概念、定义与使用方法;

    指针类型的参数和返回值;

    指针与数组的关系;

    指向指针的指针和指针数组;

一、数组

    数组的基本概念:简单来说就是具有相同数据类型的若干变量的有序集合,是一种复合类型。数组count的元素的存储空间是相邻的,数组成员可以是基本数据类型,可以是复合数据类型。数组类型的长度应该用一个整数常量表达式来指定,而其中的元素通过下标来访问。

    定义数组格式: 数据类型 数组名称[数组大小]={};

    例:

    定义和访问数组.

#include <stdio.h>
main()
{
  int count[4]={1,2, },i;
  for(i=0;i<4;i++)
  {
   printf("count[%d]=%d\n",i,count[i]);
  }
}

    这个例子通过循环把数组中额每一个元素依次访问一遍,在计算机术语中称为遍历。注意控制表达式i<4,如果写成i<=4就错了,因为count[4]是访问越界。

    注意几点:数组不能相互赋值或初始化,不能用数组类型 作为函数的参数或返回值。数组类型做右值使用时,自动转换成指向数组首元素的指针。

二、数组应用实例

    例:生成并打印随机数

    

#include "stdafx.h"
#include "stdlib.h"
#define N 20
int a[N];
void gen_random(int upper_bound)
{
	int i;
	for(i=0;i<N;i++)
	{
		a[i]=rand()%upper_bound;
	}
}
void print_random()
{
	int i;
	for(i=0;i<N;i++)
	{
		printf("%d\t",a[i]);
		
	}

}
int  main()
{
	gen_random(10);
	print_random();
	getchar();
	return 0;
}

    这里介绍一种新的语法:用#define定义一个常量。实际上编译器的工作分为两个阶段,先是预处理阶段,然后才是编译阶段。注意,虽然include和define在预处理指示中有特殊含义,但它们并不是C语言的关键字,换句话说,它们也可以用作标识符。

三、多维数组

    就像结构体可以嵌套一样,数组也可以嵌套,一个数组的元素可以是另外一个数组,这样就构成了多维数组。多维数组可分为整型数组、浮点数组和字符型数组等。

例:

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

    多维数组也可以像嵌套结构体一样用嵌套Initializer初始化。

例:

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

    注意,除了第一的长度可以由编译器自动计算而不需要指定,其余各维都必须明确指定长度。

例:多维字符数组

#include "stdafx.h"

void print_day(int day)
{
	char days[8][10]={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturay","Sunday"};
	if(day<1||day>7)
	{
		printf("Illegal day number! \n");
		return;
	}
	printf("%s\n",days[day]);
}
int main()
{
	print_day(2);
	getchar();
	return 0;
}

    这种方法称为数据驱动的编程,写代码最重要的是选择正确的数据结构来组织信息,设计控制流程和算法尚在其次,只要数据结构选择得正确,其他代码自然而然就变得容易理解和维护了。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思丰百年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值