1:数组与指针

数组的定义与访问:

int a[10]  /*定义10个变量的整形数组*/

float f[20] /*定义20个变量的浮点形数组*/

char s[5] /*定义5个变量的字符形数组*/

数组在定义时,可以不指定变量的个数,在访问变量时可以动态改变数组中变量的个数。

char a[];/*定义一个含有不定个数变量的字符数组*/

指针:

指针是一种特殊的数据类型,用来存储一个变量的内存地址。通过一个指针,可以访问这个指针的变量。

指针操作符有*和&两个,分别实现取变量和取地址的操作

例如:

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

int i=5,j; /定义一个整变量/

p=&i; /取变量i的地址赋值给p/

i=*p; /取指针p的地址赋值给j/

数组和指针

定义一个数组的时候,定义这个数组的头指针,然后分配若干个存储单元。定义的数组名称可以直接赋值给一个指针,而这个指针可以指向这个数组的第一个元素。

例子

#incluede

void main()

{

int i;

int *p;

int a[10];

for (i = 0 ; i < 10; i++)

{

a[i] = i + 10;

}

p=a;                 //将数组a的指针赋值给p

for(i = 0; i < 10;i++)

{

printf("%d ",*p);   // 输出指针p指向的值

p++;                      //指针p向后移动一个单元

}

printf("\n",*p);

p = p - 4;        //指针p向前移动4个单元

printf("%d ",*p);

}

二维数组与指针

int a[4][5];

int *p;

p=a;

数组中变量的指针地址与首指针存在这下面的关系 q = p + (行数*总列数)+ 列数

例子:

#include

void main()

{

int i = 10 , m , n;

int a[4][5];

int  *p;

for( m = 0 ; m < 4; m++)

for(n = 0; n < 5;n++)

{

a[m][n] = i;

i++;

}

p=a;

for(m = 0; m < 4; m ++)

for(n = 0 ; n < 5; n++)

{

printf("a[%d][%d] = %d",m,n,*(p+(5*m)+n));

}

printf("\n");

}

函数与指针

函数的声明

在c程序中,自定义函数需要写在被调用的函数的前面。如果前面的函数调用了后面的函数,程序就会发生错误,提示程序中找不到相应的函数,如果需要调用后面的自定义函数,需要在程序最前面声明函数。

函数声明实例:

#include

void myresult(int x);

char result(int aax);

int main()

{

int i =1 ;

while(i != 0)

{

scanf("%d",&i);

myresult(i);

}

void myresult(int x)

{

char s;

if(x > 0 && x <= 100)

{

s = result(x);

printf("%c\n",s);

}

else

{

pritnf("error/\n",s);

}

}

char result(int x)

{

char s ='A';

return s;

}

}

main 函数的参数 argc 与  argv

argc 是一个整形变量,表示参数的个数。*argv[] 是一个指针型数组,数组中的每一个指针指向一个参数的字符数组。

例子:

#include

int main(int argc , char *argv[] )

{

int i;

for(i = 0; i < argc ; i++)

{

printf("%s\n",argv[i]);

}

}

函数与指针

函数对参数的调用,有值调用和引用调用两种方法。

值调用:进行函数调用时候,给形式参数分配内存空间,并把实际参数的值直接传递给形式参数,这一过程是参数值的直接传递过程,一旦形式参数获得了值,便于实际参数没有关系。形式参数的变化对实际参数没有任何影响。

引用调用:当用指针或数组作为函数的参数时,可以用指针来访问实际参数的值。形式参数的变化,将直接引起实际参数的变化。

指针参数的简单实例:

#include

void order(int *x  , int *y , int  *z);

main()

{

int a,b,c;

a = 5;

b = 3;

c = 8;

printf("%d %d %d\n",a,b,c);

order(&a,&b,&c);

printf("%d %d %d\n",a,b,c);

}

void order(int *x , int *y, int *z)

{

int temp;

if(*x > *y)

{

temp = *x;

*x = *y;

*y = temp;

}

if(*x > *z)

{

temp = *x;

*x = *z;

*z = temp;

}

if(*y > *z)

{

temp = *y;

*y = *z;

*z = temp;

}

}

数组作为函数参数实例

数组名即为数组的首地址,可以作为指针变量来使用。

#include

void stradd(char *a, char *b, char *c)

{

while(*a != NULL)

{

*c = *a;

c++;

a++;

}

while(*b != NULL)

{

*c = *b;

c++;

b++;

}

}

int main()

{

char a[30]="abcdefg";

char b[30]="HIJKLMN";

char c[30]="";

printf("a: %s\n",a);

printf("b: %s\n",b);

stradd(a,b,c);

printf("c: %s\n",c);

}

函数返回指针实例

#include

char * stradd(char *a, char *b)

{

char *p;

p=a;

while(*a != NULL)

a++;

while(*b != NULL)

{

*a = *b;

b++;

a++;

}

return (p); //返回指针p

}

int main()

{

char a[30]="abcdefg";

char b[30]="HIJKLMN";

char *c;

printf("a: %s\n",a);

printf("b: %s\n",b);

c=stradd(a,b);

printf("c: %s\n",c);

}

c语言函数与指针,C语言指针与函数篇相关推荐

  1. linux c语言 malloc动态分配指针,C语言malloc函数为一维,二维,三维数组分配空间...

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  2. 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

    文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...

  3. 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )

    文章目录 前言 一.业务子函数接口定义要点 二.完整代码示例 前言 字符串开发模型 : strstr-while/do-while 模型 : 在 字符串 中 查找 子串特征 ; 两头堵模型 : 两个指 ...

  4. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  5. c语言fgetpos的参数,C语言fgetpos()函数:获得当前文件的读写指针(转)

    头文件:#include fgetpos()函数获得当前文件的指针所指的位置,并把该指针所指的位置信息存放到pos所指的对象中.pos以内部格式存储,仅由fgetpos()和fsetpos()使用.f ...

  6. c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?...

    在C语言程序开发中,动态内存分配是不可避免的,而调用 malloc()/free() 库函数实现这一过程是方便的,事实上,在很多C语言程序中,malloc/free 库函数的使用相当频繁,它俩的C语言 ...

  7. 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针

    之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...

  8. C语言 函数指针 - C语言零基础入门教程

    目录 一.函数指针简介 1.常规函数声明 2.函数指针声明 二.函数指针实战 三.猜你喜欢 零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.函数指 ...

  9. typedef函数指针_C语言函数指针之回调函数

    1 什么是回调函数? 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调. 如果代码立即被执行就称为同 ...

  10. 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)

    文章目录 一.指针与函数之间的关系 二.复制传参 三.地址传参 四.传一维数组(地址) 五.传二维数组(地址) 六.传指针数组(地址) 七.指针函数和函数指针 一.指针与函数之间的关系 1.我们可以给 ...

最新文章

  1. 怎么将vue模板转换为html,vue中自定义html文件的模板
  2. rust墙壁升级点什么_分享:如何在阅读Rust项目源码中学习
  3. GNS3做交换实验使用感受
  4. SpringMVC 框架系列之初识与入门实例
  5. 二、JavaScript语言--JS基础--JavaScript进阶篇--DOM对象 控制HTML元素
  6. 学习笔记 Keras:基于Python的深度学习库
  7. modbus报文解析实例_云原生、全栈可编程的下一代SDN解析与实践 (一)丨传统SDN架构演进...
  8. codeforces 69A-C语言解题报告
  9. ubuntu 安装redash
  10. C++基础::自制异常定位器
  11. Nodejs在Debian和Ubuntu上安装
  12. 创业被泼冷水怎么办?
  13. 未来手机、电脑和网络将整合为一块
  14. 生物信息学常用数据库
  15. 计算机通信的应用,计算机技术在通信中的应用
  16. ROS串口通信协议解析
  17. Android 最常用的设计模式十一 安卓源码分析—— 代理模式(proxy)
  18. 选择中医 - 虚寒性体质的人吃什么好(萝卜、生姜、地瓜、大蒜)
  19. Linux常用命令讲解(pdf在我的资源可以下载,有图)
  20. RepOptimizer学习笔记

热门文章

  1. java程序员饱和了吗?
  2. 往mysql数据库中存当前日期_在MySQL数据库中存储日期的最简单方法是什么?
  3. android时间戳字体,Android获取当前时间戳?
  4. java 删除后缀txt_java – Maven deploy:deploy-file从文件中删除扩展名
  5. 基于MHA+semi sync实现mysql数据库的高可用
  6. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)
  7. 系统内存分布及操作过程
  8. OK335xS canutils deal with compile error
  9. DelphiXE下的字符串变化
  10. node-glob学习