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;
}
(完)