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");
}
原文地址:https://www.cnblogs.com/zhanggaofeng/p/5133771.html