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. Perl的子程序

    子程序(subroutine) perl中的子程序其实就是自定义函数.它使用sub关键字开头,表示声明一个子程序 子程序名称有独立的名称空间,不会和其它名称冲突 Perl中的子程序中可以定义.引用.修 ...

  2. C#比较两个对象是否为同一个对象。

    两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...

  3. Android Studio 使用Toast

    Toast 是Android系统中体重的一种非常好的提醒方式 在程序中可以将很小的一段消息提醒给用户 在一段时间后自动消失,不会占用如何屏幕空间 Button button1=(Button) fin ...

  4. VS2017 启动调试出现 无法启动程序“http://localhost:15613” 操作在当前状态中是非法的。 同时附加进程也是错误的解决方法

    第一次发表这样的博客,不会如何的排版,还有很多的不懂,大神勿喷哈! 同时是给自己做的一次记录,已方便后面可能会同样出现该问题后不用像无头苍蝇一样到处百度乱找 VS2017 启动调试出现  无法启动程序 ...

  5. Discuz网警过滤关键词库

    积累近几年discuz关键词过滤 使用方法:1.进入后台/内容/词语过滤批量添加.2.打开CensorWords.txt,复制里面的文本信息到批量添加的输入框内,点击确定即可.如图: 关键词下载:Ke ...

  6. 提取Chrome插件为crx文件

    在Chrome浏览器输入 chrome://extensions/,点开右上角开发者模式 记录上图中的ID:gidgenkbbabolejbgbpnhbimgjbffefm 在资源管理器中找到Chro ...

  7. JavaScript初学者必看“箭头函数”

    译者按: 箭头函数看上去只是语法的变动,其实也影响了this的作用域. 原文: JavaScript: Arrow Functions for Beginners 译者: Fundebug 为了保证可 ...

  8. CSS :root 测试

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. spring boot maven打包可运行jar包

    普通打包之后在程序目录运行,或者编写bat运行时会提示“没有主清单属性”,这是因为并没有找到main()方法,需要我们指明告诉java程序 我bat中的代码 @echo off title mytit ...

  10. 如何用ABP框架快速完成项目(2) - 快的定义!

    为什么要从快的角度来讲这系列课程呢?   因为快是一个很统一很清晰的标准. 所有人对时间都有一个统一清晰的概念.  比如说这系列课程会讲到的一个实例: 集成LinqToExcel, 用我的方法大概耗时 ...