数组

一,const
1.const修饰的变量,不能被改变
eg: const int a=10;
a = 20; //error
2.const定义的变量必须初始化
3.const的一个误区
const定义的变量可以用各种const,非const对其进行初始化,甚至可以是函数的返回值之类的
eg:
const int a = 5;//在编译时进行初始化,即类似于#define,进行全文替换
const int b = size(); //在执行的时候初始化
int n =7;
const int c = n; //在执行的时候初始化
二,#define

define 标识符 替换列表(替换列表可以是数,字符串字面量,标点符号,运算符,标识符,关键字,字符常量。注意:替换列表是可以为空的)

1.误区
#define N = 100
int a[N]; //这样会成为int a[= 100],这里会处理成为一种标识记号一样
作业1:const和#define的区别
(1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安
全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会
产生意料不到的错误(边际效应)。
(2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。
规则:在C++ 程序中只使用const 常量而不使用宏常量,即const 常量完全
取代宏常量。
三,数组
1.在栈上的分布:从高地址到低地址
低地址
这里写图片描述
高地址
2.栈保护
作业2:数组什么时候分配内存,什么时候确定大小
定义时分配内存,单纯声明时不分配内存
c陷阱与缺陷第41页“数组的大小必须在编译期就作为一个常数确定下来
3.数组最大分配多少内存
与栈有关
4.数组的两个参数
1)数组名会退化为指针
数组名作为形参传递给函数时,退化为指针
2)len = sizeof(arr)/sizeof(arr[0])数组在哪里定义,就在哪里求
误区: sizeof(arr)/sizeof(arr[0])返回的是无符号整数,一个有符号整数和无符号进行比较,有符号会提升为无符号,-1编程无符号是一个很大的整数
eg:#include

#define SIZE sizeof(arr)/sizeof(arr[0])

int main()
{
int a = -1;
if(a < SIZE)
{
printf(“hello”);
}
return 0;
}
结果:什么都不打印
5.函数名不能作为左值
函数名代表入口地址
eg:x=y
编译器认为x (左值)的含义是x 所代表的地址,y(右值)的含义是y所代表的地址里面的内容
6.sizeof(c++) //c 没有进行运算
这里写图片描述
c的输出结果为10而不是11

7.数组和指针之间访问数组内的元素,&arr+1,arr+1及作业3:&arr, arr
这里写图片描述

arr+1:对指针进行加1 操作,得到的是下一个元素的地址
&arr+1:下一个数组的首地址
&arr:数组的首地址
arr:数组首元素的地止
8.char c = *(p+1) = ‘c’; //read Only
这里写图片描述
这个程序最终会编译错误
因为char*p=”abcde”中,字符串存放在常量区不可修改
9.printf(“strlen p == %d\n”,strlen(p)); //strlen不包含’\0’
strlen的功能:计算字符串s的长度,但是不包括’\0’在内
该函数的使用:头文件加#include
这里写图片描述
四,’\0’,’0’的区别
‘\0’:ASCII为0的字符,意义为:字符串结束符
’0‘:代表字符’0‘,即ASCII码值为48对应的字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值