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\n", ERRO_MSG);
return ERRO_MSG;
}
if (pinlen == 0)
{
ERRO_MSG = 2;
printf("pinlen == 0 erro msg key:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (pkey == NULL)
{
ERRO_MSG = 3;
printf("pkey == NULL erro msg key:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (pout == NULL)
{
ERRO_MSG = 4;
printf("pout == NULL erro msg key:%d\n", 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对应的内存空间在栈区,
c 字符串转数组//栈区是由系统回收的,如果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\n",buf);
system("pause");
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。