C++中变量、数组、指针、指针数组、字符串指针(记录四需要日后补充)

记录一,变量与指针:

分析一:

1、定义并初始化一个整型变量 mei,变量名是 mei,变量当前值是 210;

2、变量名实际上是一个符号地址,在系统对程序进行编译时,给每一个变量名分配一个具体的内存地址;

3、变量值是变量名对应的存储单元所存放的具体的数值;

4、变量的数据类型是指变量可以存储的数据的类型,也就是变量值的数据类型,不同的数据类型在内存中占据的内存单元长度不同;

5、程序运行时,从变量中取值,实际上是通过变量名找到对应的内存地址,从此内存地址中读取数据(变量值);

6、变量名与内存中的一个地址相对应,每个变量与其对应的具体地址的联系由C/C++编译系统完成;

7、程序中对变量进行存储操作,也即是对该变量所对应地址的存取单元(若干字节)进行存取操作(直接存取);

8、所以,可以简化的从表面理解:变量名就代表了一个内存地址,而内存地址是存放数据的,也就是通俗的说变量 mei存放了数值 210。

分析二:

1、定义并初始化一个整型指针变量 dai,变量名是 dai,变量当前值是 变量mei的地址

2、计算机内存是以字节为单位的连续的存储空间,每个字节都有一个编号,这个编号称为地址,由于内存的存储空间是连续的,所以编号也是连续的;

3、一个变量所占据内存区域一段连续字节中的第一个字节地址,就称为该变量的地址;

4、一个变量的内存地址称为该变量的指针

5、也可以定义一个变量用于存放指针(变量的内存地址),这种变量就是指针变量,也简称指针;

6、如图:

指针变量:dai;整型变量:mei;简化:adai的地址0x7ffe3b01c250-->40008,mei的地址0x7ffe3b01c25c-->50012

(1)变量mei的地址是:50012;指针变量dai的地址是:40008,因为指针变量也是一个变量,会存放数据(别的变量的内存地址),所以也会为指针分配内存空间的,只是记得:不管什么类型的指针变量,指针变量本身都是整型的,内存空间都是一样的,如 C++ 4字节 (c语言是2个字节)——32位系统;跟系统有关,16位地址,指针即为2个字节,32位系统,是4个字节,64位,则就为8个字节。

(2)dai存放的值是变量mei的地址:50012;mei存放的值是:数值56;

(3)直接对mei访问:cout << mei; 就是直接对内存 50012访问(直接存取),会得到此内存地址存放的数据:210;

(4)也可以通过指针变量dai访问变量mei(的值210),即是先直接对dai访问:cout << dai; 就是直接对内存 40008访问(直接存取),会得到此内存地址存放的数据(是mei的地址):50012,再去访问此地址,就得到了数值210;即是通过指针dai访问到了变量mei的值,这个是间接存取:cout <<  *dai  << endl;

(5)“ * ” 作为单目运算符,用于指针变量就是取内容运算符,也成指针运算符、间接访问运算符;所以 *dai 代表dai的值(内存地址)所对应的那片内存空间存放的值,就是 210;

(6)“ & ” 作为单目运算符,用于变量就是取地址运算符,&mei 就是取出变量mei对应的内存地址50012;


记录二,数组与指针数组:

分析一:

(1)一个整型数组var;一个整型指针数组ptr;

(2)对指针数组每一个元素(指针)赋值(ptr[i] = &var[i];):把数组var每一个元素的地址,分别赋值给指针数组的每一个元素;

(3)指针数组, 它的本质是存储指针的数组, 既存储 int 类型的指针的数组, 数组内的每个元素都是一个指针,指向一个存储 int 类型的地址。

(4)其他所有知识点与记录一是一致的,只是这是数组(多个变量的集合)而已;


记录三,数组与指针:

分析一:

(1)数组名aa其实已经“退化”,很肤浅的使用,就是可以“当作” 一个指针了,它对应数组aa的所有值在连续内存空间中的首地址,但是千千万万记得,数组(名)就是数组(名),绝对不是指针。

(2)&aa 和 aa 输出都是:0x7ffc61c5cf70,也是数组aa的首地址;对数组名取地址&是合法的,但有些编译器不推荐这样做,对数组名取地址的结果与直接使用数组名的结果是一致的,这是C/C++语言的一种特殊规定。但是,这两者是有不一样含义的:

&aa + 1 : 0x7ffc61c5cf90      //加了4个double地址:32字节 (整体)

aa + 1    : 0x7ffc61c5cf78      //加了一个double地址:8字节 (个体)

所以,aa 可以理解为指向一个4元素数组首地址的指针类型,而&aa 可以理解为指向一个含4个元素的数组整体的指针,注意区别整体与个体。

(3)ppp 是一个指针,所以它有自己的地址(内存空间):&ppp :0x7ffc61c5cf68;它存放的值是aa数组的首地址:ppp: 0x7ffc61c5cf70;aa也代表数组的首地址,所以在访问数组元素这个使用上ppp就等同aa了;

(4)总结一下两者的区别:

1、指针是需要占用内存空间来存储地址的;数组名是一个常量,可以修改指针指向的内容,无法改变数组名的指向;

2、数组和指针对于sizeof来说是不同的,指针变量占用的空间通常等于当前CPU的最大位数,数组名取sizeof的话,得到的则是数组的大小;

3、用extern声明一个外部变量,指针和数组不能混用。如在文件1.cpp里声明了char ca[]="abcde",在文件2.cpp里引用,必须是extern char ca[],而不能extern char * ca,因为前者是常量,后者是一个占用了内存空间的指针变量,区别很大;


记录四,字符串指针(这个还没有理解彻底,日后再补充):

分析一:

(1)const char *sarr = "abcdefg";  将字串常量赋值给字符指针变量:

将字符串常量 abcdefg 存放在常量区,是一个无名存储区(或称无名数组);

把此无名存储区的首地址赋值给 sarr;

sarr 就指向了字符串中的第一个字符 a;

字符串 abcdefg 依次存入首地址开始的连续存储单元中;

系统在字符串尾加上了'\0';    

(2)C++ 的 cout << sarr << endl; 会直接输出字符串值 abcdefg,而不是sarr这个指针变量的值(即是无名存储区的首地址)——目前只是知道这样,不知道为什么?


记录五,字符串指针数组(这个还没有理解彻底,日后再补充):




分析一:

(1)知识点参考记录四的字符串指针即可;


记录六,再看字符串指针数组和字符串指针(这个还没有理解彻底,日后再补充):


分析一:

(1)知识点参考记录四的字符串指针即可;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,419评论 3 44
  • 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一个字节都有一个内存...
    C语言学习阅读 1,278评论 0 4
  • C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一...
    xx_cc阅读 3,672评论 11 39
  • 徐志摩,原名章垿,浙江海宁硖石人,现代诗人,散文家。“爱、自由、美”是他短暂一生的狂烈追求。 爱,疯狂痴情,不单单...
    陈德_2016阅读 473评论 0 2
  • 001 中国人的传统理财观念,节俭生财,理财是富人,高收入人群的专利,习惯把钱放银行才有安全感。但靠节俭不能成为富...
    诺诺爱皓皓阅读 209评论 1 4