数组指针与指针数组

数组类型:每个数组有自己的类型,由元素类型和数组大小共同决定。
c语言通过typedef type(name)[size];重新定义一个数组名。例如:
typedef int(AINT5)[5];
AINT5 arr;
数组指针:
数组指针用于指向一个数组。
定义:arraytype* p;
type arry[5];
p=(&arraytype);
或者直接定义:type (*p)[5]


#include <stdio.h>
int arr_arr[5][5];
typedef char(CHAR5)[5];//对数组重命名
typedef int (INT5)[5];
typedef float (FLOAT5)[5];
int main(){

    INT5 a5;
    CHAR5 c5;
    FLOAT5 f5;
    FLOAT5 *pf5=&f5;//定义一个数组指针,指向f5
    float f[5];
    FLOAT5 *pf=&f;
    char (*pc5)[5]=&c5;//定义一个数组指针,指向c5
    //char (*pc)[4]=&c5;//这个会不会报错呢?
    int i=0;
    printf("%d,\t%d\n",sizeof(INT5),sizeof(a5));
    for(i=0;i<5;i++){
    (*pf5)[i]=i;

    }
    for(i=0;i<5;i++){
    printf("%f\n",f5[i]);

    }
    printf("%p,\t%p,\t%p\n",arr_arr,arr_arr+1,&arr_arr+1);
    printf("%p,\t%p,\t%p\n",&c5,pc5,pc5+1);
    return 0;
}

这里写图片描述

指针数组:
指针数组就是一个普通的数组,每一个元素是指针。
定义: type* parr[n];

#include<stdio.h>
    #include<string.h>
    #define SIZE(a) (sizeof(a)/sizeof(*a))
    int lookup_keyword(const char* p,const char* table[],const int size){

        int ret = -1;
        int i=0;
        for(i=0;i<size;i++){
            if(strcmp(p,table[i])==0){

                ret =i;
                break;
                }

            }

        return ret;
    }
    int main(){

        const char* keyword[] = {

            "do",
            "for",
            "if",
            "while"
            };
        printf("%d\n", lookup_keyword("do",keyword,SIZE(keyword)));
        printf("%d\n", lookup_keyword("if",keyword,SIZE(keyword))); 
        printf("%d\n", lookup_keyword("main",keyword,SIZE(keyword)));

        }

会打印出来0,2,和-1;
通过这节课我们能够自己编写实用性的命令了。
通常main函数有三种形式:
int main()无参;
int main(int argc,char* argv[])带有命令行参数;
int main(int argc,char* argv[],char* env[])带有环境变量参数;
main函数为由系统直接调用的函数,范例代码:

#include<stdio.h>
int main(int argc,char* argv[],char* env[]){

    int i;
    printf("************commd-start******************\n");
    printf("\n\n\n");
    for(i=0;i<argc;i++){
    printf("%s\n",argv[i]);//每个元素都相当是字符串,字符型数组嘛

    }
    printf("\n\n\n");
    printf("************commd-end******************\n");
    printf("\n\n\n");
    printf("************env-start******************\n");
    printf("\n\n\n");
    for(i=0;env[i]!=NULL;i++){
    printf("%s\n",env[i]);

    }
    printf("\n\n\n");
    printf("************env-end******************\n");
}

能打印出拟敲的命令,和环境参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值