c语言 数组名是常量指针
//数组名是常量指针 #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语言 数组名是常量指针的更多相关文章
- C语言 数组名不是指针
今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...
- C/C++——C语言数组名与指针
版权声明:原创文章,转载请注明出处. 1. 一维数组名与指针 对于一维数组来说,数组名就是指向该数组首地址的指针,对于: ]; array就是该数组的首地址,如果我们想定义一个指向该数组的指针,我们可 ...
- C语言 数组名不是首地址指针
今天上计算机系统课的时候老师讲到了C中的聚合类型的数据结构.在解释数组名的时候说"数组名是一个指针,指向该数组的第一个元素",附上ppt(第二行): 我觉得这是不正确的,是一个常见 ...
- C/C++二维数组名和二级指针
转载 :https://blog.csdn.net/wu_nan_nan/article/details/51741030 作者:吴一奇 1. 指针1.1 一个指针包含两方面:a) 地址值:b) 所 ...
- sizeof数组名和字符指针是有区别的
sizeof数组名和字符指针是有区别的. #include <stdio.h> #include <stdlib.h> void change(char url[]); int ...
- c语言数组的概念和指针的加减使用
//数组变量名:就是一个地址:就是数组首元素的地址#include <stdio.h> int main(void) { int age[5] = {10,50,100,22,44}; / ...
- C语言——数组名、取数组首地址的区别(一)
目录: 1. 开篇 2. 论数组名array.&array的区别 3. array.&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题, ...
- [skill] C语言数组名到底是个啥
1. 正常情况下,数组名是个地址常量. 2. sizeof(数组名)的时候,数组名就代表数字名,其类型为 type array[], 返回数组元素个数. 3. 除了2的情况以外,可以理解为一个指针常量 ...
- C语言学习笔记 (001) - 常量指针与指针常量的区别(转帖)
三个名词虽然非常绕嘴,不过说的非常准确.用中国话的语义分析就可以很方便地把三个概念区分开. 一) 常量指针. 常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量 ...
随机推荐
- C迷途指针
在计算机编程领域中,迷途指针,或称悬空指针.野指针,指的是不指向任何合法的对象的指针. 当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指 ...
- Instruments指南:如何调试内存泄露
Instruments指南:如何调试内存泄露 开篇 现在,你应该使用的ARC,而不是原来我们使用的MRC或者其他.但是我们在使用ARC的时候也会出现内存泄露的情况. 幸运的是,苹果为我们提供了Inst ...
- 多线程之NSOperation和NSOperationQueue
这篇文章里我将不过多的谈及理论知识,这些东西会的自然会,不会的,看多了也是云里雾里.下面我讲更多的用代码+注释的方式来讲如何使用NSOperation和NSOperationQueue. 1.NSOp ...
- 使用CocoaPods管理第三方开源类库
iOS开发中经常会用到许多第三方开源类库,比如AFNetworking.FMDB.JSONKit等等,使用CocoaPods这个工具就能很方便得对工程中用到的类库进行管理,包括自动下载配置以及更新. ...
- mysql 批量更新与批量更新多条记录的不同值实现方法
批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = ...
- 回文数 第N个回文数
判断回文数还是不难,如果能转为字符串就更简单了. 如果是求第N个回文数呢. 12321是一个回文数,这里先考虑一半的情况. 回文数的个数其实是有规律的.如: 1位回文数: 9个 2位回文数: 9个 3 ...
- Erlang 程序引发共享内存 bug 的一个例子
虽然 Erlang 的广告说得非常好,functional.share-nothing.消息传递,blah blah 的,好像用 Erlang 写并发程序就高枕无忧了,但是由于 Erlang 信奉高度 ...
- java web中日期Date类型在页面中格式化显示的三种方式
一般我们经常需要在将服务器端的Date类型,传到页面进行显示,这就涉及到一个如何格式化显示Date类型的问题,一般我们有三种方式进行: 1)在服务端使用SimpleDateFormat等类格式化成字符 ...
- TCP/IP包格式详解
文章参考地址:http://blog.chinaunix.net/uid-20698826-id-4700710.html http://blog.csdn.net/mrwangwang/articl ...
- SQL Server 2008 R2——VC++ ADO 操作 重复利用_CommandPtr
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...