《王道程序员求职宝典》第一章、数组

第一篇、程序设计基础及数据结构基础

一些基本概念:

1.c++内置类型:

        分为基本类型和复合类型。基本类型包括整数、浮点数及两者的多种变体。复合类型包括数组、字符串、指针、引用、结构体和共用体等

2.内存分区

        1)堆:由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表。由malloc或者new来分配,free和delete来释放。若程序员不释放,程序结束时由系统释放

        2)栈:由编译器自动分配和释放的,存放函数的参数值、局部变量的值等。操作方式类似数据结构中的栈

        3)全局(静态)存储区:

        4)文字常量区:

        5)代码区

第一章、数组

1.int& a[10];//错误,没有引用数组,但是数组有引用

定义数组的引用:

int a[6] = {1, 2, 3, 4, 5, 6};
int (&p)[6] = a;

此时,p是数组a的引用。数组的引用可以用于函数实参传递。

2.数组的初始化:没有显式初始化的索引,会自动初始化

#include <iostream>
using namespace std;

int main()
{
	int a[4] = {0};
	int b[4];
	cout << a[2] << " " << b[2] << endl;
	return 0;
}

3.数组的动态声明和释放

int *a = new int[n];
delete []a;

4.c风格字符串和字符数组

c风格字符串末尾是'\0'

5.二维数组

//1
int a[3][4] = {
    {0, 1, 2, 3},
    {4, 5, 6, 7},
    {8, 9, 10, 11}};
//2
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11};
int a[3][4] = {{1},{2}};

c++中,在声明和初始化一个二维数组时,如果对二维数组的所有元素都赋值,则第一维可以省略

6.二维数组的动态声明

int **a = new int*[m];
for(int i = o; i < m; i++)
    a[i] = new int[n];

//释放
for(int i = 0; i < m; ++i)
    delete []a[i];
delete []a;

7.指针数组与数组指针

int *a[10];//创建一个有十个整型指针的数组

数组指针,其实就是一个指向数组的指针

int (*p)[10];//定义了一个指向有十个元素整型数组的指针

二维数组的数组名是一个数组指针

int a[4][10];
int (*p)[10];
p = a;//a的类型是int(*)[10]

int a[10];
int (*p)[10] = &a;
int *q = a;

上面代码中,虽然p和q都是指向同一个元素,但是p和q的类型不同。

8.指针在高维数组中的应用

 

一些考题:

int main()
{
	char a[] = {'a', 'b'};
	char b[] = {'a', 'b', '\0'};
	cout << strlen(a) << " " << strlen(b) << endl;
	cout << sizeof(a) << " " << sizeof(b) << endl;
	return 0;
}

strlen(a)  这个值是不确定的,strlen函数需要确保以null结束

注意逗号表达式

关于逗号表达式:

int main()
{
	int a = 1, b = 2, c = 3;
	int a1 = (a++, ++b, c--);
	int a2;
	a2 = a, b, c--;
	cout << a1 << " " << a2 << endl;
	return 0;
}

等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大脑白质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值