C 语言之函数访问
一、字符串
字符串变量访问
char i[] = "hello world!"; char *p = &s[0]; for(;*p!='\0';p++){ printf("%c",*p); }
字符串存储在数组里,有一个特点:结尾处一定会留一个 '\0' 的字符。
结合数组的连续的内存空间和相同类型的数据特性,我们可以直接判定当前值是否为 '\0' 进行判断。
字符串函数访问
#include <stdio.h> void test(char *p){ for(;*p!='\0';p++){ // printf("%c",*p); putchar(*p); } } int main(){ char i[] = "hello world!"; test(&i[0]); return 0; }
写成函数也完全一样,注意俩点:
1、我使用了 &i[0]
来传递数组的首地址。
2、printf
更换为 putchar
函数。
二、一维数组
一维数组变量访问
#include <stdio.h> int main(){ int i[] = {1,2,3,4,5,6,7,8,9,10}; for(int number=0;number<=(sizeof(i)/sizeof(int))-1;number++){ printf("%d\n",i[number]); } }
用了一个小技巧:sizeof
运算。
另外有一个 -1
是因为 sizeof
从 1
开始运算,计算机从 0
开始读取。
一维数组函数访问
#include <stdio.h> void test(int *p,int number){ for(int i=0;i<=number-1;i++){ printf("%d\n",p[i]); } } int main(){ int i[]={1,2,3,4,5,6,7,8,9,10,}; test(&i[0],sizeof(i)/sizeof(int)); return 0; }
写成函数用到了一个技巧:void test(int *p,int number)
获取用户地址以及元素个数。
三、二维数组
二维数组变量访问(基础)
#include <stdio.h> int main(){ char i[3][2] = {{'a','b'},{'c','d'},{'e','f'}}; char (*p)[2] = &i[0]; putchar(p[0][0]); }
二维数组有它的特殊性,指针在访问的时候,需要将指针设置为列指针((*p) 是行;[2]是列)。
创建俩列指针,分别指向对应资源。
二维数组函数访问(函数)
#include <stdio.h> void test(int (*sp)[2], int numberX, int numberY){ for(int x=0;x<=numberX-1;x++){ for(int y=0;y<=numberY-1;y++){ printf("%d",sp[x][y]); } printf("\n"); } } int main(){ int i[5][2]={1,2,3,4,5,6,7,8,9,10}; test(i,5,2); return 0; }
重点:定义了行指针
,通过 传值
方式将信息给到函数处理。
二位数组函数访问(常量)
#include <stdio.h> #define numberX 5 #define numberY 2 void test(int content[numberX][numberY]){ for(int x=0;x<=numberX-1;x++){ for(int y=0;y<=numberY-1;y++){ printf("%d",content[x][y]); } printf("\n"); } } int main(){ int i[numberX][numberY]={1,2,3,4,5,6,7,8,9,10}; test(i); return 0; }
重点:通过 define
预编译常量来实现二维数组的操作,更方便。
二维数组的函数访问(高级)
#include <stdio.h> void test(int (*sp)[2], int numberY){ int *p; p = *sp; for(int y=0; y<numberY;y++){ printf("%d",*p++); } } int main(){ int a[5][2]={1,2,3,4,5,6,7,8,9,10}; for (int i=0;i<5;i++){ test(&a[0]+i, 2); printf("\n"); } return 0; }
(完)
【推荐】FlashTable:表单开发界的极速跑车,让你的开发效率一路狂飙
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次 ADL 导致的 C++ 代码编译错误
· MySQL查询执行顺序:一张图看懂SQL是如何工作的
· 为什么PostgreSQL不自动缓存执行计划?
· 于是转身独立开发者
· C#.Net筑基-泛型T & 协变逆变
· C#/.NET/.NET Core优秀项目和框架2025年6月简报
· Cursor 1.2重磅更新,这个痛点终于被解决了!
· C#开发的Panel滚动分页控件(滑动版) - 开源研究系列文章
· 上周热点回顾(6.30-7.6)
· 记一次ADL导致的C++代码编译错误