//数组名是常量指针

#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. AsyncTask.cancel()的结束问题

    实际项目中有这么一个问题,用户进入详情界面,那么我们就要网络加载数据并展现在UI上,这个加载用线程或者异步. 这里就拿项目中统一用异步任务来获取网络数据把. 用户可能会有这么一个操作,它在一个商品(说 ...

  2. 浅析LruCache原理

    Android用LruCache来取代原来强引用和软引用实现内存缓存,因为据说自2.3以后Android将更频繁的调用GC,导致软引用缓存的数据极易被释放. LruCache使用一个LinkedHas ...

  3. 【读书笔记】iOS-GCD-API

    一,Dispatch Queue dispatch_async(queue, ^{ /* *想执行的任务 */ }); 其中queue分为两种: 1,Serial Dispatch Queue 等待现 ...

  4. 【读书笔记】iOS-Tagged Pointer对象-注意事项

    一,2013年9月,苹果推出了iPhone5s,与此同时,iPhone5s配备了首个采用64位架构的A7双核处理器,为了节省内存和提高执行效率,苹果提出了Tagged Pointer的概念. 对于64 ...

  5. IOS SizeClasses 详解

    SizeClasses 详解 iOS 8在应用界面的可视化设计上添加了一个新的特性-Size Classes.对于任何设备来说,界面的宽度和高度都只分为三种描述:紧凑,任意和宽松.这样开发者便可以无视 ...

  6. android 进程间通信---Service Manager(1)

    Bind机制由4个部分组成.bind驱动,Client,ServiceManager &Service 1.Bind其实是一个基于linux系统的驱动,目的是为了实现内存共享. bind驱动的 ...

  7. php操作memcache的使用【转】

    1.简介 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任意多个连接, ...

  8. Spring web.xml配置文件解析

    概要解析

  9. Effective Java 61 Throw exceptions appropriate to the abstraction

    Exception translation: higher layers should catch lower-level exceptions and, in their place, throw ...

  10. Java并发大师Brain Goetz和Doug Lea 的中英文博客文章地址

    Java并发大师Brain Goetz和Doug Lea是Java并发方面最权威的人物,他的文章绝对是最具有参考价值的,值得仔仔细细的推敲和研究. Brain Goetz 中文地址:http://ww ...