c/c++ 数组和指针

知识点

1,数组就是指针,对应代码里的test1

2,用auto声明,得到的是指针,对应代码里的test2

3,用decltype声明,得到的不是指针 ,对应代码里的test3

4,用指针模拟end ,对应代码里的test4

5,标准库函数std::begin,std::end,对应代码里的test5

6,ptrdiff_t和size_t,ptrdiff是数组下标相加减的值的类型,size_t是数组下标的类型,对应代码里的test6

7,数组的下标可以是负值,标准库的string,vector的下标也可以是负值,对应代码里的test7

8,用数组初始化vector,注意生成的vector里的元素不包括第二个参数,对应代码里的test8

#include <iostream>
#include <vector> using namespace std; int main(){ //test1 数组就是指针
/*
string ar[] = {"aa","bb"};
string* p = ar;
*p = "cc";
string* p1 = &ar[1];
*p1 = "dd";
for(auto s : ar){
cout << s;
}
cout << endl;
*/ //test2 用auto声明,得到的是指针
/*
int ia[] = {1,2,3,5};
//ia1为整数指针
auto ia1(ia);
*ia1 = 9;
auto ia2(&ia[3]);
*ia2 = 8;
for(auto s : ia){
cout << s << ",";
}
cout << endl;
*/ //test3 用decltype声明,得到的不是指针
/*
int ia[3];
decltype(ia) ia3 = {2,3,4};
//ia3 = &ia[0];//编译错误
ia3[2] = 9;
for(auto s : ia3){
cout << s << ",";
}
cout << endl;
*/ //test4 用指针模拟end
/*
int arr[] = {0,1,2};
int* end = &arr[3];
for(int* beg = arr;beg != end; ++ beg){
cout << *beg;
}
cout << endl;
*/ //test5 标准库函数std::begin,std::end
/*
int arr[] = {0,1,2};
int* beg = std::begin(arr);
//int* end = &arr[3];
int* end = std::end(arr);
for(;beg != end; ++ beg){
cout << *beg;
}
cout << endl;
*/ //test6 ptrdiff_t和size_t
//ptrdiff是数组下标相加减的值的类型,size_t是数组下标的类型
/*
int arr[] = {1,2,3,4,5};
int* b = std::begin(arr);
int* e = std::end(arr);
ptrdiff_t juli = e - b - 1;
cout << juli << endl;
size_t sz = juli;
cout << arr[sz] << endl;
*/ //test7 数组的下标可以是负值,标准库的string,vector的下标也可以是负值
/*
int ia[] = {1,2,3,4,5};
int* p = &ia[2];
int j = p[1];//相当于*(p + 1),也就是ia[3]
cout << j << endl;
int k = p[-2];//相当于*(p - 2),也就是ia[0]
cout << k << endl;
string s("abcde");
char* p1 = &s[2];
cout << p1[-1] << endl;
vector<int> v{1,2,3,4};
int* p2 = &v[3];
cout << p2[-2] << endl;
*/ //test8 用数组初始化vector,注意生成的vector里的元素不包括第二个参数
/*
int ia[] = {0,1,2,3,4,5,6};
vector<int> v(std::begin(ia), std::end(ia));
for(auto s : v){
cout << s << ",";
}
cout << endl;
vector<int> v1(ia + 1, ia + 4);
for(auto s : v1){
cout << s << ",";
}
cout << endl;
*/ }

c/c++ 学习互助QQ群:877684258

本人微信:xiaoshitou5854

c/c++ 数组和指针的更多相关文章

  1. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)

    督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1.我们知道,将一个数组赋给另一个数组,就是将一个数组的元素逐个赋值给另一数组的对应元素,相应的,将一个vector 赋给另 ...

  2. C语言核心之数组和指针详解

    指针 相信大家对下面的代码不陌生: int i=2; int *p; p=&i;这是最简单的指针应用,也是最基本的用法.再来熟悉一下什么是指针:首先指针是一个变量,它保存的并不是平常的数据,而 ...

  3. 《征服 C 指针》摘录3:数组 与 指针

    一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...

  4. C指针-数组和指针的归一

    int bArr[] = {1,2,3}; int *iarr = bArr; *iarr = 6; printf("%d\n",*iarr); printf("%d\n ...

  5. 《C专家编程》第四章——令人震惊的事实:数组和指针并不相同

    数组和指针是C语言里相当重要的两部分内容,也是新手程序员最容易搞混的两个地方,本章我们锁定指针与数组,探讨它们的异同点. 首先来看指针与数组在声明上的区别: int a[10]; int *p; 很明 ...

  6. (C语言)数组与指针的区别

    以前常常听过这种说法,说数组和指针这两者比较像,但是不能混淆,可是一直没能理解.刚刚在李云的<专业嵌入式软件开发>中,看了讲述数组与指针区别的一章,似乎有所领悟.本着知乎上看到的这张图,我 ...

  7. C语言教学--二维数组和指针的理解

    对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...

  8. 【C语言学习】《C Primer Plus》第10章 数组和指针

    学习总结 1.数组初始化方式: int a[]={1,2,3} int a[SIZE]={1,2,3} //SIZE是宏定义,数组初始化个数不能大于SIZE,否则报错:当个数小 //SIZE,自动补0 ...

  9. C语言学习004:数组与指针

    在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的

  10. C语言--指向多维数组的指针和指针数组

    #include <stdio.h> //void show(char *p[]); ]); int main(){ ][]={","abc","x ...

随机推荐

  1. HBase 架构脑图

    https://docs.transwarp.io/5.0/goto?file=HyperbaseManual_intro-hbase.html#intro-hbase

  2. ubuntu搭建nodejs生产环境——快速部署手册

    为什么不用CentOS而用Ubuntu作为生产环境的运行平台?这个我也比较好奇,公司订的只能沿用传统,从使用成本的角度来说,此举也是值得肯定的. 测试环境 腾讯云 Ubuntu 16.04 阿里云 U ...

  3. TCP/IP协议学习(一)

    一.网络模型 OSI七层模型:自上至下依次是 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 应用层:具体的应用协议如HTTP.SMTP.FTP.TELNET.DNS等 表示层:针对数据格 ...

  4. Perl文件、目录常用操作

    注意,这些操作的对象是文件名(相对路径/绝对路径),而非文件/目录句柄,句柄只是perl和文件系统中文件的关联通道,而非实体对象. 创建文件 在unix类操作系统中有一个touch命令可以非常方便的创 ...

  5. JavaScript 系列博客(七)

    JavaScript 系列博客(七) 前言 本篇博客介绍页面节点概念.文档结构以及如何使用 js 操作文档节点还有事件 target 以及 BOM 操作. 节点 dom与dom属性 // DOM: 文 ...

  6. c++选择重载函数

    一.函数重载 普通函数重载的关键是参数列表---也称函数特征标.函数参数中有以下情况可以出现重载: 1.  形参个数不同 2.  形参的类型不同 3.  形参的类型和个数都不同 const形参和函数重 ...

  7. mvc 中合并两个list集合

    有时候,在进行查询操作的时候需要将从数据库中查询的两张表进行合并,成为一张表然后返回给前端.或者在原有的一张表基础上面加几个新的字段. 这个时候可以新建一个.class[model类],在这个新建的m ...

  8. C#调用存储过程执行缓慢,但在数据库中执行却很快的问题

    参考: http://www.debugease.com/mssqlbasic/976568.html https://www.cnblogs.com/Irving/p/3951220.html ht ...

  9. JQuery官方学习资料(译):操作元素

      获取和设置元素的信息     有很多种方式可以改变现有的元素,最常见的是改变HTML内容或者元素的属性.JQuery提供了简单的夸浏览器的方法来帮助你实现元素信息的获取和设置. .html():获 ...

  10. echarts X轴显示不全 有省略

    代码如下: xAxis: [ { type: 'category', data: result.weekListAndYear,//result.weekList, axisLabel:{ // in ...