• C 语言之函数访问


    一、字符串

    字符串变量访问

    char i[] = "hello world!";
    char *p = &s[0];
    for(;*p!='';p++){
        printf("%c",*p);
    }
    

    字符串存储在数组里,有一个特点:结尾处一定会留一个 '' 的字符。

    结合数组的连续的内存空间和相同类型的数据特性,我们可以直接判定当前值是否为 '' 进行判断。

    字符串函数访问

    #include <stdio.h>
    void test(char *p){
    	for(;*p!='';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
    ",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
    ",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("
    ");
    	}
    }
    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("
    ");
    	}
    	
    }
    
    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("
    ");
    	}
    	return 0;
    }
    
    (完)
  • 相关阅读:
    MongoDB Java 学习笔记 (Java操作MongoDB)
    SQL中CONVERT转化函数的用法
    C# winform滚动字幕
    修改msconfig->引导->高级选项-》最大内存为512M
    把CheckedListBoxControl设置为单选框
    base.AutoScaleMode = AutoScaleMode.Font; 方法“InitializeComponent”内的代码由设计器生成,不应手动修改。请移除任何更改,然后尝试重新打开设计器”。
    winform 上传文件
    C#winform MDI子窗体打开时内容显示不全
    C# 网页信息采集(数据访问)
    RTO & RPO
  • 原文地址:https://www.cnblogs.com/itxdm/p/c_visiting_from_function.html
Copyright © 2020-2023  润新知