温故而知新 C++ 数组与指针
#include <stdio.h> using namespace std; int main(int argc, _TCHAR* argv[])
{
int a[];
int b[] = {,,,};
char c[] = "";
int *d= new int[];
*d = ;
*(d+) = ;
*(d+) = ;
*(d+) = ; printf("a length = %d\n",sizeof(a));
printf("b length = %d\n",sizeof(b));
printf("c length = %d\n",sizeof(c));
printf("d length = %d\n",sizeof(d)); delete d;
d = nullptr; system("pause"); return ;
}
数组的初始化方式,可以用以上几种:
1.直接声明,以后再对其赋值。
2.声明的时候给出初始值,用"{}"来给出初始值,如果是char类型,是可以用{"a","b","c"}或者直接用字符串赋值"abc";
3.用一个指针声明,动态分配数组的大小,例子中是定义指针的时候就从堆中申请了4个int的内存来表示数组,也是可以在要用到的时候再用new申请分配内存,并且这样的数组是需要手动去进行内存释放的,请注意下面的delete。
运行结果:

在运行结果中 a和b的大小都等于 sizeof(type)*length 类型乘数组的长度,c的大小的算法也是一样的,只是因为字符数组会在最后面用一个字节长度来保存字符串的结尾字符'\0',sizeof(d) == 4 是而并不是因为sizeof(int) == 4 ,这个4表示的仅仅是指针的大小,由于在32位的系统里是用4个字节来表示一个指针的,即无论是char* short*的指针,大小都为4。

如果用了一种动态申请内存的方式来表示一个字符串,请在最后一位加上'\0',系统是不会主动地像char[N]这种方式一样,会在第N+1位填充一个'\0';
#include <stdio.h> using namespace std; int main(int argc, _TCHAR* argv[])
{
char *a= new char[];
*a = 'a';
*(a+) = 'b';
*(a+) = 'c';
*(a+) = 'd'; //我们应该*(a+3) = '\0'
//*(a+4) = '\0' //这种方式是绝对不允许的
printf("a strlen = %d\n",strlen(a)); delete a;
a = nullptr; system("pause"); return ;
}
运行结果
a strlen =
很显示,这不是我们想要的结果,我们是希望得到的这个a的长度为4,那么我们要解决,就只能用注释里的方式,主动在最后一位填充一个'\0'
数组与指针的关系
int main(int argc, _TCHAR* argv[])
{
char a[] = "abcde";
char *p1 = a;
char *p2 = &a[];
char *p3 = &a[]; printf("*p1 = %c, *p2 = %c\n",*p1,*p2);
printf("*(p1+2) = %c, *(p2+2) = %c *(p3-1) = %c\n",*(p1+),*(p2+),*(p3-)); system("pause"); return ;
}
运行结果:
*p1 = a, *p2 = a
*(p1+) = c, *(p2+) = c *(p3+) = a
指针可以方便地锁定数组的某一个位置,然后从指针当前位置进行前后游走。
数组对应着一块内存区域,而指针是指向一块内存区域。数组的地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针所指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。
指针常量与常量指针
指针常量:int *const p=&a; 这种指针是在初始化的时候对它进行赋值的,不充许之后再对p进行其它地址的赋值。
常量指针:const int* p; 这种指针允许修改它指向的地址,但是不允许修改它所指向的值。
int a=,b=;
const int *p;
p=&a;
p=&b;
*p=; //不允许,不允许修改常量指针指向的值 int *const p1=&a;
int *const p2; //不允许,必须对其初始化
p2=&b; //不允许,p2是常量不允许作为左值
指针常量与常量指针多用于函数参数的限定。
温故而知新 C++ 数组与指针的更多相关文章
- 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)
督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...
- C语言核心之数组和指针详解
指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...
- 《征服 C 指针》摘录3:数组 与 指针
一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...
- C指针-数组和指针的归一
int bArr[] = {1,2,3}; int *iarr = bArr; *iarr = 6; printf("%d\n",*iarr); printf("%d\n ...
- 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同
数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...
- (C语言)数组与指针的区别
以前常常听过这种说法,说数组和指针这两者比较像,但是不能混淆,可是一直没能理解.刚刚在李云的<专业嵌入式软件开发>中,看了讲述数组与指针区别的一章,似乎有所领悟.本着知乎上看到的这张图,我 ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- 【C语言学习】《C Primer Plus》第10章 数组和指针
学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...
- C语言学习004:数组与指针
在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的
随机推荐
- linux安装vnc
1. 安装vnc-server yum install vnc-server redhat的iso文件中自带 tigervnc-server 2.设置vnc密码 切换到oracle用户,之后再运行vn ...
- pycharm-4.5.3 汉化教程(附汉化包)
汉化包地址 http://pan.baidu.com/s/1coLZau 密码: muu5 1.先找到Pycharm文件夹中的lib文件夹,将resources_en.jar复制到桌面并改名为res ...
- 再探LIS
昨天讲课的时候突然想起来LIS还有一个东西没搞懂. 又去研究了下. LIS问题就是要求一个序列中最长不下降或上升子序列,而此问题应用较广,例如很多题会有这样的条件 对于i,j如果他们可以同时选取,则必 ...
- 百度云推送的Java实现
推送现在基本APP都有,项目中要通知和消息,所以综合考虑用了百度云推送 Java实现步骤: 1. 下载 http://push.baidu.com/sdk/push_server_sdk_for_ja ...
- EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
场景:在实际的项目中使用EntityFramework都会遇到使用Ef处理连接查询的问题,这里做一些小例子如何通过Linq语法处理内连接(inner join).外连接(left/right oute ...
- 设置IIS7文件上传的最大大小 maxAllowedContentLength,maxRequestLength
当上传一个超过30M的文件时,服务器会重定向至404.13页面,报错如下: HTTP Error 404.13 - Not Found The request filtering module is ...
- Android使用Linux mount获取SdCard存储文件夹
Android的智能手机各不同样.如今非常多Android智能手机都是自带存储,有的还带有扩展内存的Sdcard卡槽. 在Android开发中,非常多时候依据Android提供的获取SdCard存储方 ...
- Eclipse用法和技巧二十四:当git遇上eclipse
git是非常优秀的代码管理工具,eclipse是非常不错的,免费的IDE.工作中两者碰到一起,有点麻烦了:eclipse对于每个项目会生成一些特定的文件,而这些文件又不是项目必须的,并且每个人的配置是 ...
- 【C语言天天练(二一)】内联函数
引言:调用函数时,一般会由于建立调用.传递參数.跳转到函数代码并返回等花费掉一些时间,C语言的解决的方法是使用类函数宏.在C99中,还提出了第二种方法:内联函数. 内联 ...
- MIUI6&7桌面角标开源代码简介
MIUI6&7桌面角标开源代码简介 MIUI6&7上重新设计了桌面app图标的角标显示,基本规则如下: 一.基本介绍 1.默认的情况 当app 向通知栏发送了一条通知 (通知不带进度条 ...