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");
    }
  • 相关阅读:
    从留言簿开始,学习MonoRail MVC(三)
    从留言簿开始,学习MonoRail MVC(二)
    程序集版本最后一位使用SVN版本号的自动生成方法
    如何让.Net控件在设计时InitializeComponent()中不生成相关代码
    [收藏]Web Services and C# Enums
    从留言簿开始,学习MonoRail MVC(一)
    .Net控制USB设备相关内容
    .Net 2.0ListView控件在Windows 2000和Windows XP上的差异
    基于高德地图Windows Phone API 快速开发地图相关APP(二)
    android map api v2 示例 步骤及问题
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5133771.html
Copyright © 2011-2022 走看看