• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 详解C语言中的函数、数组与指针

详解C语言中的函数、数组与指针

作者:木头0.0 字体:[增加 减小] 来源:互联网 时间:2017-05-28

木头0.0 通过本文主要向大家介绍了c语言数组与指针详解,c语言数组详解,c语言指针详解,c语言指针详解视频,c语言指针用法详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1、函数:当程序很小的时候,我们可以使用一个main函数就能搞定,但当程序变大的时候,就超出了人的大脑承受范围,逻辑不清了,这时候就需要把一个大程序分成许多小的模块来组织,于是就出现了函数概念;

      函数是C语言代码的基本组成部分,它是一个小的模块,整个程序由很多个功能独立的模块(函数)组成。这就是程序设计的基本分化方法;

  (1) 写一个函数的关键:

    函数定义:函数的定义是这个函数的实现,函数定义中包含了函数体,函数体中的代码段决定了这个函数的功能;

    函数声明:函数声明也称函数原型声明,函数的原型包含三部分:函数名,返回值类型,函数参数列表,函数的声明是告诉使用函数的人,这个函数使用时应该传递给他什么样的参数,

         它会返回什么样类型的返回值。这些东西都是写函数的人在函数定义中规定好的,如果使用函数的人不参照这个原型来使用,就会出错,结果就会和你想的不一样;

    函数调用:函数调用就是使用函数名来调用函数完成功能。调用时必须参照原型给函数传参,然后从函数得到适当的返回值作为结果;

  (2) 函数的参数:函数调用的过程,其实就是实参传递给形参的一个过程。这个传递像是一次拷贝,实参(本质是一个变量)本身并没有进入到函数内,而是把自己的值复制了一份传给了函数中的形参,

          在函数中参与运算,这种传参方法,就叫做传值调用;

    形参:形式参数,在函数定义和函数声明中的参数列表中的参数都是形参;

    实参:实际参数,函数调用中,实际传递的参数才是实参。

  (3) 返回值(关键字return):当函数执行完之后,会给调用该函数的地方返回一个值。这个值的类型就是函数声明中返回值类型,这个值就是函数体中最后一句return xxx;返回的那个值;

  (4) 函数名:取函数名要注意以下几点:

    第一,起名字时候不能随意,要符合规则,而这个规则分别有两个层次,即第一层是合法,第二层是合理。合法就是符号C语言中变量名的命名规则,合理就是变量名起的好,

        人一看就知道什么意思,一看就知道这个函数是干嘛的;

    第二,C语言中,所有的符号都是区分大小写的;

    第三,C语言函数名的命名习惯。这个没有固定的结论,有多种使用都很广泛的命名方式如下:

        linux的命名习惯:student_age  str_to_int

        骆驼命名法:studentAge  strToInt

    注:想进一步了解可以参考林锐的《高质量程序设计指南》;

// 简单计算器
#include <stdio.h>
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);
int main(void)
{
  int a, b, c;
  a = 54;
  b = 32;
  c = add(a, b);
  //c = sub(a, b);
  //c = mul(a, b);
  //c = div(a, b);
  printf("c = %d.\n", c);
  printf("a - b = %d.\n", sub(a, b));
  return 0;
}
int add(int a, int b)
{
  return a + b;
}
int sub(int a, int b)
{
  return a - b;
}
int mul(int a, int b)
{
  return a * b;
}
int div(int a, int b)
{
  return a / b;
}
</div>

2、数组:数组就是若干个数组成的一个组,数就是一个特定数据类型的变量,组就是说好多数放在了一起;

  (1) 数组的定义:

    int a[10];   数组中元素类型 数组名[数组元素个数];

    注:数组中的所有元素都是同一种数据类型,不可能在一个数组中出现两种数据类型的数。

  (2) 数组的使用:数组定义的时候是作为一个整体来定义的,但是使用的时候不能作为一个整体来使用,使用时必须拆开使用数组中的各个元素;

    如:数组int a[10],使用其中的十个元素,分别用a[0]……a[9],其中[]是数组的标志,[]中的数字叫做数组的下标(index,索引),下标是我们访问数组中各个元素的指引,

      下标是0代表数组中第一个元素,下标是1代表数组第二个元素,以此类推,若数组长度为n,则下标中最后一个是n-1;

    注:访问数组时要特别注意下标,下标是从0开始的,如果下标超出了n-1,会产生越界访问,结果是不可预期的;

  (3) 数组的初始化:初始化是为了让对象有一个预定的初始状态,数组的初始化分两种:

    第一种:完全初始化。依次赋值;

    第二种:不完全初始化。初始化式中的值从a[0]开始,依次向后赋值,不足的默认用0填充赋值

  (4) 不同数据类型的数组: 

 int a[3];      // 整型数组
    float b[3];     // 单精度浮点型数组
    double c[3];    // 双精度浮点型数组
    char d[3];     // 字符型数组
</div>

  (5) 字符数组:在C语言中引用一个单个字符时,应该用单引号''括起来,譬如'a';

    字符数组的初始化:定义数组同时初始化,则可以省略数组定义时[]中的长度。C语言编译器会自动推论其长度,推论依据是初始化式中初始化元素的个数;

    引用字符串:在C语言中引用一个字符串时,应该用""括起来,如"abcde",其中"abcde"实际上有6个字符,分别是'a' 'b' 'c' 'd' 'e' '\0';

          '\0' 是C语言中定义的字符串的结尾标志,这个字符是ASCII码表中的第一个字符,它的编码值是0,对应的字符是空字符(不可见字符);

// 数组的演示
#include <stdio.h>
int main(void)
{
  int a[4];
  a[0] = 23;
  a[1] = 54;
  a[2] = 98;
  a[3] = 74;
  printf("a[1] = %d, a[3]= %d.\n", a[1], a[3]);
  return 0;
}
</div>
// 字符数组的演示
#include <stdio.h>
int main(void)
{
/*
  int i = 0;
  //char a[5];
  //char a[5] = {'a', 'b', 'c', 'd', 'e'};
  //char a[5] = {97, 98, 99, 100, 101};
  //char a[] = {97, 98, 99, 100, 101};
  char a[] = "abcde";
  for (i=0; i<5; i++)
  {
    printf("a[%d] = %d  %c\n", i, a[i], a[i]);
  }
*/
  int i = 0;
  char a[] = {97, 98, 99, 100, 101};
  char b[] = "abcde";
  printf("sizeof(a) = %d, sizeof(b) = %d.\n", sizeof(a), sizeof(b));
  return 0;
}
</div>

3、指针:全称是指针变量,其实质是C语言的一种变量。这种变量比较特殊,通常它的值会被赋值为某个变量的地址值(p = &a),然后我们可以使用*p这样的方式去间接访问p所指向的那个变量;

  (1) 指针存在的意义:可以间接访问。有了指针之后,我们访问变量a不必只通过a这个变量名来访问。而可以通过p = &a; *p = xxx;这样的方式来间接访问变量a;

  (2) 两个重要的运算符:&和*

    &:取地址符,将它加在某个变量前面,则组合后的符号代表这个变量的地址值;

    如: int a; int *p; p = &a; 则将变量a的地址值赋值给p

      a      代表变量a本身

      p      代表指针变量p本身

      &a    代表变量a的地址值

      *p    代表指针变量p所指向的那个变量,也就是变量a

      &p    代表指针变量p本身的地址值,符号虽合法,但对题目无意义

      *a    把a看作一个指针,*a表示这个指针所指向的变量,该符号不合法

    *:指针符号。指针符号在指针定义和指针操作的时候,解析方法是不同的;

      int *p; 定义指针变量p,这里的*p含义不是代表指针变量p所指向的那个变量,在定义时这里的*含义是告诉编译器p是一个指针

      *p = 0x24; 使用指针的时候,*p则代表指针变量p所指向的那个变量

  (3) 指针的定义和初始化:

    第一种:先定义再赋值

        int *p;    // 定义指针变量p

        p = &a;    // 给p赋值

    第二种:定义的同时初始化

        int *p = &a;  // 效果等同于上面的两句

  (4) 各种不同类型的指针:指针变量本质上是一个变量,指针变量的类型属于指针类型。int *p;定义了一个指针类型的变量p,这个p所指向的那个变量是int型;

    int *pInt;      // pInt是指针变量,指向的变量是int类型

    char *pChar;    // pChar是指针类型,指向的变量是char类型

    float *pFloat;

    double *pDouble;

    注:各种指针类型和它们所指向的变量类型必须匹配,否则结果不可预知;

  (5) 指针定义的两种理解方法:

    int *p;

    第一种(推荐):首先看到p,这个是变量名;其次,p前面有个*,说明这个变量p是一个指针变量;最后,*p前面有一个int,说明这个指针变量p所指向的是一个int型数据;

    第二种:首先看到p

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言中 值传递和指针传递实例详解
  • C语言 指针与数组的详解及区别
  • 详解C语言中的函数、数组与指针
  • C语言 函数指针(指向函数的指针)详解
  • C语言 指针与二维数组详解
  • C语言 数组指针详解及示例代码
  • C 语言指针概念的详解
  • 详解C语言编程中的函数指针以及函数回调
  • 详解C语言结构体中的函数指针
  • 详解C语言中的常量指针和指针常量

相关文章

  • 2017-05-28C/C++可变参数的使用
  • 2017-05-28c语言全局变量和局部变量问题及解决汇总
  • 2017-05-28vc++实现的tcp socket客户端和服务端示例
  • 2017-05-28C/C++回调函数介绍
  • 2017-05-28VC++植物大战僵尸中文版修改器实现代码
  • 2017-05-28详解C语言中的char数据类型及其与int类型的转换
  • 2017-05-28优先队列(priority_queue)的C语言实现代码
  • 2017-05-28详解C语言中symlink()函数和readlink()函数的使用
  • 2017-05-28C++中字符串查找操作的两则实例分享
  • 2017-05-28C语言实现杨辉三角实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c++作用域运算符用法(全局变量和局部变量)
    • 基于C语言实现五子棋游戏完整实例代码
    • C语言 数据结构双向链表简单实例
    • C++11的新特性简单汇总介绍 (二)
    • C语言编程中分配内存空间的相关函数
    • C++求逆序对的方法
    • c 调用python出现异常的原因分析
    • c语言实现字符串中单词的反转
    • tinyxml 常用的C++ XML解析器非常优秀
    • 如何在C++中实现按位存取

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有