zoukankan      html  css  js  c++  java
  • c语言 数组名是常量指针

    //数组名是常量指针
    
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    //char (*pin)[20]二维数组指针的定义
    int getrequerstr(char(*pin)[20], int pinlen,const char * pkey, char *pout){
        //定义返回key
        int ERRO_MSG = 0;
        //形参非空校验
        if (pin == NULL)
        {
            ERRO_MSG = 1;
            printf("pin == NULL erro msg key:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        if (pinlen == 0)
        {
            ERRO_MSG = 2;
            printf("pinlen == 0 erro msg key:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        if (pkey == NULL)
        {
            ERRO_MSG = 3;
            printf("pkey == NULL erro msg key:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        if (pout == NULL)
        {
            ERRO_MSG = 4;
            printf("pout == NULL erro msg key:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        char *p = NULL;
        //循环遍历字符串数组,判断每个元素中是否有字符串"as",找到一个后,就可以返回
        for (int i = 0; i < pinlen; i++)
        {
            //pin本身是一个一维数组的指针,*pin则是获取这个一维数组的第一个元素的指针,
            //**pin这是这个一维数组的第一个元素所指向内存空间的值,即这个一维数组的第一个元素的数据
            //判断第一个字符串是否存在字符串"as"
            //strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。
            p = strstr(*pin, pkey);
            if (p==NULL)
            {
                continue;
            }
            else{
                p = p + strlen(pkey);
                while (*pout++ = *p++);
                break;
            }
        }
        return ERRO_MSG;
    }
    
    void main(){
        int a[10] = { 0 };
        /*a = a + 1;   错误:error C2106 : “ = ” : 左操作数必须为左值*/
        /*a++; 错误:error C2106 : “ = ” : 左操作数必须为左值*/
        //以上两个例子说明数组名a是个常量,不可以修改,原因是数组a对应的内存空间在栈区,
        //栈区是由系统回收的,如果a的值改变,系统将无法回收数组a所在的内存空间,造成内存泄漏,
        //a改变即数组的起始地址发生变化,此时系统就不知道数组a从那里开始,那里结束,因此无法回收
    
        //提高部分  二维数组
        char strarr[3][20] = {"11111as2222","wqerqew","trya1s56y"};
        //要求:判断字符串数组里的字符串是否含有字符串"as",如果有截取as后面的所有字符,存入新数组里
        //定义新字符串数组
        char buf[20] = { 0 };
        getrequerstr(strarr,3,"as" ,buf);
        /*strarr++;  错误 :“++”需要左值*/
        //证明二维数组名也是常量
        //(*strarr)++;//  错误 :“++”需要左值
        //*strarr本质上是这个二维数组中‘第一个一维数组的数组名,说明二维数组中的一维数组名也是常量
        printf("%s
    ",buf);
        system("pause");
    }
  • 相关阅读:
    HDU 4348 To the moon(可持久化线段树)
    HDU 5875 Function 大连网络赛 线段树
    HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
    HDU 5876 大连网络赛 Sparse Graph
    HDU 5701 中位数计数 百度之星初赛
    CodeForces 708B Recover the String
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    ASP.NET生成验证码
    ASP.NET生成验证码
    ASP.NET生成验证码
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5133771.html
Copyright © 2011-2022 走看看