1. //数组名是常量指针
  2.  
  3. #define _CRT_SECURE_NO_WARNINGS
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include<string.h>
  7.  
  8. //char (*pin)[20]二维数组指针的定义
  9. int getrequerstr(char(*pin)[], int pinlen,const char * pkey, char *pout){
  10. //定义返回key
  11. int ERRO_MSG = ;
  12. //形参非空校验
  13. if (pin == NULL)
  14. {
  15. ERRO_MSG = ;
  16. printf("pin == NULL erro msg key:%d\n", ERRO_MSG);
  17. return ERRO_MSG;
  18. }
  19. if (pinlen == )
  20. {
  21. ERRO_MSG = ;
  22. printf("pinlen == 0 erro msg key:%d\n", ERRO_MSG);
  23. return ERRO_MSG;
  24. }
  25. if (pkey == NULL)
  26. {
  27. ERRO_MSG = ;
  28. printf("pkey == NULL erro msg key:%d\n", ERRO_MSG);
  29. return ERRO_MSG;
  30. }
  31. if (pout == NULL)
  32. {
  33. ERRO_MSG = ;
  34. printf("pout == NULL erro msg key:%d\n", ERRO_MSG);
  35. return ERRO_MSG;
  36. }
  37. char *p = NULL;
  38. //循环遍历字符串数组,判断每个元素中是否有字符串"as",找到一个后,就可以返回
  39. for (int i = ; i < pinlen; i++)
  40. {
  41. //pin本身是一个一维数组的指针,*pin则是获取这个一维数组的第一个元素的指针,
  42. //**pin这是这个一维数组的第一个元素所指向内存空间的值,即这个一维数组的第一个元素的数据
  43. //判断第一个字符串是否存在字符串"as"
  44. //strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。
  45. p = strstr(*pin, pkey);
  46. if (p==NULL)
  47. {
  48. continue;
  49. }
  50. else{
  51. p = p + strlen(pkey);
  52. while (*pout++ = *p++);
  53. break;
  54. }
  55. }
  56. return ERRO_MSG;
  57. }
  58.  
  59. void main(){
  60. int a[] = { };
  61. /*a = a + 1; 错误:error C2106 : “ = ” : 左操作数必须为左值*/
  62. /*a++; 错误:error C2106 : “ = ” : 左操作数必须为左值*/
  63. //以上两个例子说明数组名a是个常量,不可以修改,原因是数组a对应的内存空间在栈区,
  64. //栈区是由系统回收的,如果a的值改变,系统将无法回收数组a所在的内存空间,造成内存泄漏,
  65. //a改变即数组的起始地址发生变化,此时系统就不知道数组a从那里开始,那里结束,因此无法回收
  66.  
  67. //提高部分 二维数组
  68. char strarr[][] = {"11111as2222","wqerqew","trya1s56y"};
  69. //要求:判断字符串数组里的字符串是否含有字符串"as",如果有截取as后面的所有字符,存入新数组里
  70. //定义新字符串数组
  71. char buf[] = { };
  72. getrequerstr(strarr,,"as" ,buf);
  73. /*strarr++; 错误 :“++”需要左值*/
  74. //证明二维数组名也是常量
  75. //(*strarr)++;// 错误 :“++”需要左值
  76. //*strarr本质上是这个二维数组中‘第一个一维数组的数组名,说明二维数组中的一维数组名也是常量
  77. printf("%s\n",buf);
  78. system("pause");
  79. }

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. iOS 获取UIView所在的VIewController

    写程序的时候我们经常要封装代码,当你封装了一个UIView的子类里需要调用所在ViewController的方法用如下代码调取所在的VIewController #pragma mark - 获取所在 ...

  2. Python数据结构与算法--面向对象

    前面已经讲过,Python是一种面向对象的编程语言. 面向对象编程语言中最重要的特征是允许程序员创建类建立数据模型来解决问题. 我们之前利用抽象数据类型提供的逻辑来描述数据对象 (它的状态) 和功能 ...

  3. asp xmlhttp 读取文件

    Response.Write LoadTxtFile("URL") Function LoadTxtFile(LoadFile) Dim XMLHTTP, XMLDOC, Resp ...

  4. PL/SQL基础2(笔记)

    1 第一个PL/SQL的程序 DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END; / --2一个简单的PL/SQL程序 DECLARE v ...

  5. IOS xib在tableview上的简单应用(通过xib自定义cell)

    UITableView是一种常用的UI控件,在实际开发中,由于原生api的局限,自定义UITableViewCell十分重要,自定义cell可以通过代码,也可以通过xib. 这篇随笔介绍的是通过xib ...

  6. IOS开发之实现App消息推送(最新)

    好久没有写过博客啦,今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多 ...

  7. 利用eclipse抽取 代码片段为方法

    选取要被抽取成方法的代码片段,右键->Refactor--->Extract Method 填写方法名称     抽取后成了这个样子:

  8. celery 快速入门教程 celery 定时器

    当然首先得安装celery和rabbitmq-server,如果有redis需要安装redis 安装Redis $ yum install redis 启动 Redis $redis-server 检 ...

  9. Autocomplete:属性介绍、firefox中文支持问题

    如有问题,请前往 http://www.cnblogs.com/dreamowneryong/p/4953911.html 原文评论交流 一,属性介绍 * minChars (Number) 在触发a ...

  10. C#程序调用cmd执行命令

    对于C#通过程序来调用cmd命令的操作,网上有很多类似的文章,但很多都不行,竟是漫天的拷贝.我自己测试整理了一下. 代码: string str = Console.ReadLine(); Syste ...