C语言-函数、数组、指针



-函数

格式:声明输出变量类型 函数命名(参数){函数代码}

example:int sum(int a,int b){

int c=a+b;

return c;

使用时直接打函数名 如:int num=sum(10,20);

其中sum就是一个求和函数,上述代码表示求10与20的和用int类型的变量num接收函数结果,打印后可得num=30;同样我们可以按照上述函数构造格式自己定义需要的函数如求差求乘积函数等甚至很多复杂函数(函数库)

函数可以将相对独立的某个功能提取出来这样可以在其他程序中多次重复使用 即函数的封装

-形参和实参

上面函数中 a、b都是int类型的形式参数,10、20是实际参数,形参实参之间仅是值的传递,将10传递给a、将20传递给b,于是函数中a+b才能得到实际数据结果c也是形式参数

-数组

格式:元素类型 数组名称[数组长度];

example:int a[10];

下标从0开始,直到长度-1;字符数组需要 \0 作为结束符号,因此需要多一个长度。利用下标访问数组中的元素,数组绝不能越界 所以在写入数组时需添加安全判断避免出现数组越界情况,一旦创建则不能更改大小

数组是一段有序的数据容器 在内存中是一段连续的内存(指针偏移),数组中只能存放一种类型的元素注:字符串就是用字符数组存储的

数组的遍历一般是利用for循环 对数组中元素一一访问遍历:for(int i=0, i < array.length, i++)

length = sizeof(array)/sizeof(array[0]); 这样当数组的元素类型改变时 不需要改变其求数组长度的代码

数组本身不能赋值 若要将一个数组赋值给另一个数组只能采取遍历的方法,数组作为函数参数时往往必须用另一个参数代表该数组的大小并传入,不能在传入的数组的[]中给出数组的大小

字符串是字符数组 char[4] 代表四个字符的字符串

-指针

取地址符&取得的既是该变量在内存空间中的地址,指针就是保存地址的变量

int *p = &i;  这段代码表示的就是取出变量i的地址并赋予变量p,若有 i = 24; 则可得 *p == 24;  普通变量的值就是实际的值:i == 24;而指针变量的值是具有实际量的变量的地址 虽然有 *p == i == 24; 但p是一个十六位进制的数字,表示内存空间的地址

在函数中有形参和实参的问题 直接对其数据进行操作有很多不便之处,比如若要写一个函数并传入两个参数 该函数实现交换传入的两个参数的值这一功能 由于在函数中两个参数都是形参 直接交换它们俩的值对函数外的main函数中需要交换值的两个参数没有任何影响,即该函数没有达到我们预想的效果。此时若用指针在该函数内直接在内存空间上对需要交换值的变量进行操作,结果通过指针返回,即可解决上述问题。

符号 * 是一个单目运算符 用来反问指针的值所表示的地址上的变量

-指针与数组的关系:

函数参数表中的数组实际上就是指针 数组变量是特殊的指针 数组变量本身就表示地址所以取数组的地址时不需要使用取地址符&  eg: int a[10];  int*p = a; 但数组元素表示的是变量 取地址时需要使用取地址符&

eg: int*p = &a[0];  实际上由于数组就是一种指针 所以对于数组有这样的关系:a == &a[0];    p[0] == a[0];

上述的数组介绍中 数组在内存中是一段连续的内存 指针是指向内存的变量所以就有了指针偏移的问题,指针的偏移会导致指针指向的内存随之偏移 而数组是一段连续的内存 所以只需获取指针的偏移量我们仍可以得到偏移后指针指向数组中哪个元素。简单介绍:

int array[4] = (11,22,33,44);  int *p = array;  则有:*p == array[0];  p[0] == array[0] == 11;

指针偏移:p[3] = array[3] == 44;  int *q = &array[2];  q[-1] = array[1] == 22;

时间: 2024-10-10 17:21:52

C语言-函数、数组、指针的相关文章

C++语言中数组指针和指针数组彻底分析

#################################                              ##       基本知识               ##                              ################################# 当然我们一切都是从最简单的内建类型开始,最后我会做一些推广.先看一下基本的形式,我们从这里起步! Cpp代码 --------------指针---------------- int a

c语言的数组指针与指针数组

1. 数组指针:指向数组的指针是数组指针 先看下面一段代码: #include <stdio.h> int main(void) { int m[10]; printf("m = %p, &m = %p\n", m, &m); printf("m + 1 = %p, &m + 1 = %p\n", m + 1, &m + 1); return 0; } 运行上面的代码得到的结果如下图: 上面代码中&m是指向数组的指

指针数组vs数组指针 指针函数vs函数指针

在分辨这些重要的概念时,我们先回顾一下前面所讲的C之三值合一,由于三个值所求出的地址是相同的,所以经常有传言说他们都是首元素的地址.这种说法是不正确的.为什么说它是不正确的呢? 首先定义一个指针,将三个值赋给它 *p=ar; *p=&ar[0]; *p=&ar//出错 程序编译后在表达式*p=&ar时出错,说明ar并不是指针类型.ar是数组名代表的是整个空间,因此ar应该是数组指针. 这四个概念看起来很容易混淆,但实际上只需要记住再看这些概念的时候先看后两个字,就可以看出它的类型,

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

C语言基础知识----指针数组 &amp;&amp; 数组指针 &amp;&amp; 函数指针 &amp;&amp;指针函数

指针数组 && 数组指针 char (*ptr)[5]; //定义一个指向数组指针ptr,指向包含5个char类型的数组 char *a[5]; //定义一个指针数组a,包含5个char*类型指针 #include <stdio.h> int main(void) {     char *a[5]={"red","white","blue","dark","green"};   

C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数

1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technician.cpp: source.cpp: 5员工管理案例-销售和经理实现 修改employee.h: displayStatus不用虚函数了 salesman.h: salesman.cpp: manager.h: manager.cpp: 6员工管理案例-销售经理的实现 7 中午回顾 注意: 多继承

C语言:通过指针函数输出二维数组中每个学生的成绩

// //  main.c //  Pointer_function // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:通过指针函数,输入学生学号时,在控制台上显示对应的学生成绩. #include <stdio.h> float *search(float(*p)[4],int n)//float(*p)[4]是数组指针,指向有4个float元素的二位数组的

C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态

1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针类型 3)如何定义一个函数指针(指向一个函数的入口地址) [中级程序员 转 高级程序员的 必经之路] 1,函数类型做函数的参数 把函数的入口地址传过来,奇怪的效果:[多态就是这样] 函数指针 做 函数参数 思想剖析 1,数组指针语法梳理 回顾,如何定义数组数据类型: [email protected

C语言 指针基础篇 数组,函数与指针的运用 2 14

下面看看如何在函数中运用指针吧 下面是往函数传入指针的简单操作,不是传入数组的.判断一个a是否大于b是的话给,是的话对其进行操作,不是的话就直接返回. 1 #include <stdio.h> 2 int main(){ 3 int num1,num2,*p1,*p2; 4 p1 = &num1,p2=&num2; 5 scanf("%d%d",&num1,&num2); 6 7 int fun(int *n1,int *n2); //我们在

深入理解C语言函数指针(转)

本文转自:http://www.cnblogs.com/windlaughing/archive/2013/04/10/3012012.html 示例1: void myFun(int x); //声明也可写成:void myFun( int ); int main() { myFun(100);//一般的函数调用 return 0; } void myFun(int x) { printf("myFun: %d\n",x); } 我们一开始只是从功能上或者说从数学意义上理解myFun