c语言函数与指针,C语言指针与函数篇
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语言指针与函数篇相关推荐
- linux c语言 malloc动态分配指针,C语言malloc函数为一维,二维,三维数组分配空间...
c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...
- 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...
- 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )
文章目录 前言 一.业务子函数接口定义要点 二.完整代码示例 前言 字符串开发模型 : strstr-while/do-while 模型 : 在 字符串 中 查找 子串特征 ; 两头堵模型 : 两个指 ...
- 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- c语言fgetpos的参数,C语言fgetpos()函数:获得当前文件的读写指针(转)
头文件:#include fgetpos()函数获得当前文件的指针所指的位置,并把该指针所指的位置信息存放到pos所指的对象中.pos以内部格式存储,仅由fgetpos()和fsetpos()使用.f ...
- c语言怎么让写的函数兼容int型和char型_既然C语言void指针是“万能指针”,那么malloc还需类型转换吗?...
在C语言程序开发中,动态内存分配是不可避免的,而调用 malloc()/free() 库函数实现这一过程是方便的,事实上,在很多C语言程序中,malloc/free 库函数的使用相当频繁,它俩的C语言 ...
- 【C语言进阶深度学习记录】三十一 数组作为函数参数时退化为指针
之前的学习数组的文章中,已经知道一维数组作为函数参数的时候,最终会被编译器编译为指针.今天来看看二维数组的情形 文章目录 1 为什么C语言中的数组作为函数参数会退化为指针? 2 二维数组作为函数参数如 ...
- C语言 函数指针 - C语言零基础入门教程
目录 一.函数指针简介 1.常规函数声明 2.函数指针声明 二.函数指针实战 三.猜你喜欢 零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.函数指 ...
- typedef函数指针_C语言函数指针之回调函数
1 什么是回调函数? 首先什么是"回调"呢? 我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调. 如果代码立即被执行就称为同 ...
- 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)
文章目录 一.指针与函数之间的关系 二.复制传参 三.地址传参 四.传一维数组(地址) 五.传二维数组(地址) 六.传指针数组(地址) 七.指针函数和函数指针 一.指针与函数之间的关系 1.我们可以给 ...
最新文章
- 怎么将vue模板转换为html,vue中自定义html文件的模板
- rust墙壁升级点什么_分享:如何在阅读Rust项目源码中学习
- GNS3做交换实验使用感受
- SpringMVC 框架系列之初识与入门实例
- 二、JavaScript语言--JS基础--JavaScript进阶篇--DOM对象 控制HTML元素
- 学习笔记 Keras:基于Python的深度学习库
- modbus报文解析实例_云原生、全栈可编程的下一代SDN解析与实践 (一)丨传统SDN架构演进...
- codeforces 69A-C语言解题报告
- ubuntu 安装redash
- C++基础::自制异常定位器
- Nodejs在Debian和Ubuntu上安装
- 创业被泼冷水怎么办?
- 未来手机、电脑和网络将整合为一块
- 生物信息学常用数据库
- 计算机通信的应用,计算机技术在通信中的应用
- ROS串口通信协议解析
- Android 最常用的设计模式十一 安卓源码分析—— 代理模式(proxy)
- 选择中医 - 虚寒性体质的人吃什么好(萝卜、生姜、地瓜、大蒜)
- Linux常用命令讲解(pdf在我的资源可以下载,有图)
- RepOptimizer学习笔记
热门文章
- java程序员饱和了吗?
- 往mysql数据库中存当前日期_在MySQL数据库中存储日期的最简单方法是什么?
- android时间戳字体,Android获取当前时间戳?
- java 删除后缀txt_java – Maven deploy:deploy-file从文件中删除扩展名
- 基于MHA+semi sync实现mysql数据库的高可用
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](五)
- 系统内存分布及操作过程
- OK335xS canutils deal with compile error
- DelphiXE下的字符串变化
- node-glob学习