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 是因为 sizeof1 开始运算,计算机从 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;
}
posted @ 2021-04-26 22:49  季文康  阅读(161)  评论(0编辑  收藏  举报