//数组名是常量指针

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> //char (*pin)[20]二维数组指针的定义
int getrequerstr(char(*pin)[], int pinlen,const char * pkey, char *pout){
//定义返回key
int ERRO_MSG = ;
//形参非空校验
if (pin == NULL)
{
ERRO_MSG = ;
printf("pin == NULL erro msg key:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (pinlen == )
{
ERRO_MSG = ;
printf("pinlen == 0 erro msg key:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (pkey == NULL)
{
ERRO_MSG = ;
printf("pkey == NULL erro msg key:%d\n", ERRO_MSG);
return ERRO_MSG;
}
if (pout == NULL)
{
ERRO_MSG = ;
printf("pout == NULL erro msg key:%d\n", ERRO_MSG);
return ERRO_MSG;
}
char *p = NULL;
//循环遍历字符串数组,判断每个元素中是否有字符串"as",找到一个后,就可以返回
for (int i = ; 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[] = { };
/*a = a + 1; 错误:error C2106 : “ = ” : 左操作数必须为左值*/
/*a++; 错误:error C2106 : “ = ” : 左操作数必须为左值*/
//以上两个例子说明数组名a是个常量,不可以修改,原因是数组a对应的内存空间在栈区,
//栈区是由系统回收的,如果a的值改变,系统将无法回收数组a所在的内存空间,造成内存泄漏,
//a改变即数组的起始地址发生变化,此时系统就不知道数组a从那里开始,那里结束,因此无法回收 //提高部分 二维数组
char strarr[][] = {"11111as2222","wqerqew","trya1s56y"};
//要求:判断字符串数组里的字符串是否含有字符串"as",如果有截取as后面的所有字符,存入新数组里
//定义新字符串数组
char buf[] = { };
getrequerstr(strarr,,"as" ,buf);
/*strarr++; 错误 :“++”需要左值*/
//证明二维数组名也是常量
//(*strarr)++;// 错误 :“++”需要左值
//*strarr本质上是这个二维数组中‘第一个一维数组的数组名,说明二维数组中的一维数组名也是常量
printf("%s\n",buf);
system("pause");
}

c语言 数组名是常量指针的更多相关文章

  1. C语言 数组名不是指针

    今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...

  2. C/C++——C语言数组名与指针

    版权声明:原创文章,转载请注明出处. 1. 一维数组名与指针 对于一维数组来说,数组名就是指向该数组首地址的指针,对于: ]; array就是该数组的首地址,如果我们想定义一个指向该数组的指针,我们可 ...

  3. C语言 数组名不是首地址指针

    今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...

  4. C/C++二维数组名和二级指针

    转载 :https://blog.csdn.net/wu_nan_nan/article/details/51741030  作者:吴一奇 1. 指针1.1 一个指针包含两方面:a) 地址值:b) 所 ...

  5. sizeof数组名和字符指针是有区别的

    sizeof数组名和字符指针是有区别的. #include <stdio.h> #include <stdlib.h> void change(char url[]); int ...

  6. c语言数组的概念和指针的加减使用

    //数组变量名:就是一个地址:就是数组首元素的地址#include <stdio.h> int main(void) { int age[5] = {10,50,100,22,44}; / ...

  7. C语言——数组名、取数组首地址的区别(一)

    目录: 1. 开篇 2. 论数组名array.&array的区别 3. array.&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题, ...

  8. [skill] C语言数组名到底是个啥

    1. 正常情况下,数组名是个地址常量. 2. sizeof(数组名)的时候,数组名就代表数字名,其类型为 type array[], 返回数组元素个数. 3. 除了2的情况以外,可以理解为一个指针常量 ...

  9. C语言学习笔记 (001) - 常量指针与指针常量的区别(转帖)

    三个名词虽然非常绕嘴,不过说的非常准确.用中国话的语义分析就可以很方便地把三个概念区分开. 一) 常量指针. 常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量 ...

随机推荐

  1. Swift Standard Library: Documented and undocumented built-in functions in the Swift standard library – the complete list with all 74 functions

    Swift has 74 built-in functions but only seven of them are documented in the Swift book (“The Swift ...

  2. 通过设置虚拟机(ubantu15.10)的分辨率达到全屏效果

    最近搭建了一个ubantu 15.10虚拟机,怎么折腾都不能全屏显示.虽然我已经点了,  还是无法达到真正的全屏. 查了一下,http://jingyan.baidu.com/article/0964 ...

  3. 单元测试_JUnit4的应用与实践

    本文实例为:JUnit4+Eclipse+CVS的实践 目录 1.测试环境搭建 1.1 JDK安装部署 1.2 Eclipse安装部署 1.3 Eclipse添加JUnit4 1.4 CVS项目文件引 ...

  4. (android) SharedPreferences 两种方式的存储范围

    1 SharedPreferences settings =Activity.getPreferences(Activity.MODE_PRIVATE); 访问数据的范围为 当前的activity 2 ...

  5. EF+MVC+cod First项目性能优化总结

    1.EF:this.Configuration.UseDatabaseNullSemantics = true; //关闭数据库null比较行为 2.实体必填字段要加:[Required]属性,可定长 ...

  6. MVC如何在单独的类库中添加区域

    今天要做一个将区域放到单独的类库中的程序,其实就是多加几个引用的问题,但是我比较喜欢这种设计结构,因为这样的话可以把单独的应用逻辑放在单独的类库中处理,项目看起来更清晰分明,所以写了这个随笔. 首先创 ...

  7. Mysql 高负载排查思路

    Mysql 高负载排查思路 发现问题 top命令 查看服务器负载,发现 mysql竟然百分之两百的cpu,引起Mysql 负载这么高的原因,估计是索引问题和某些变态SQL语句. 排查思路 1. 确定高 ...

  8. 一次由于字符集问题引发的MySQL主从同步不一致问题追查

    近期业务准备上线一个新功能,灌入数据之后突然发现主从同步停止,报错如下: Error 'Duplicate entry '66310984-2014-04-18 00:00:00--122815.sh ...

  9. 微信公众平台应用开发:方法、技巧与案例--柳峰,Java语言版本

    他本人的博客:http://blog.csdn.net/lyq8479 作者简介: 刘运强,网名“柳峰”,资深微信公众平台应用开发工程师,国内微信公众平台应用开发的先驱之一,项目经验丰富.他还是一位资 ...

  10. Linux dsh

    一.简介 目前在企业网络中越来越多的出现Linux服务器,而如何方便高效的管理大量的Linux服务器是系统管理员非常关心的一个问题,而dsh正是一个通过命令行有效地管理大量Linux的工具.   二. ...