您的位置:首页 > 编程语言 > C语言/C++

C++笔记--指针数组和结构

2016-05-25 14:54 169 查看
指针
类型为T*的变量能保存一个类型T对象的地址
Char c=‘a’;Char * p=& c;//保存了c的地址

指针的操作一般都是间接的引用,就是相当于引用指针所指的对象。

0是一个特殊的东西。它可以被当做任意的整型,浮点类型,或者是指针,这些都是视情况而定的。0表示当时的一个指针没有指向任何对象。

数组
数组的大小必须是一个常量,如果想用变量来表示数组的大小,可以使用vector来表示,例如:vector<int> vi(i);//I表示一个变量,数组的大小可以变化

数组不会出现赋值操作的。例如:v4={'a','b','c'};//错误的,没有数组赋值

字符串数组
字符串总是以一个空字符‘\0’结束,所以总是比看到的大小+1

Char *P=“abc”;//这个是合法的,char *P就是相当于一个字符串
P[2]='A';//这个是错误的,给常量赋值不对

Char P[]="ABC";
P[2]='A';//这个是正确的。

在应用于指针的时候,==比较的是变量的地址值,而不是指针所指的值。

数组指针
数组的名字可以被用做到它的开始元素的指针
Int v[]={1,2,3,4};
int *p=v;//这里p指向的是数组v的开始元素(隐式的转换,从int[]转换成了int*)
int *p=&v[4];//指向最后元素之后的一个位置,实际上并没有什么用

常量--const
加上const的常量在声明的时候就必须赋值

对于const的常量,有些时候常量的值在编译的时候已知,就不用为它分配存储空间,有些就是在编译的时候值不知,就必须为它分配存储空间。
const int c1=1;//不需要分配空间
const int c2=2;//
const int c3=my_f(3);//这个在编译时未知,所以要分配空间
const int * p=&c2;//这个就要为c2分配空间了,因为在这里调用了c2的地址。

指针和常量
Const char *p=s;//这个是指向常量的指针,p[2]是不能修改的,但是p指针可以:p=pv;
char *const p=s;//常量指针
p[3]='g';//正确,指向的不是一个常量
p=pv;//错误,这个指针是常量指针,指向不能修改
const char *const p=s;//这个是一个const到const

Const char* 和char const*是一样的,都是指向一个常量的普通指针,如果从右到左读的话,能对理解很有帮助
char *const p;//p是一个const指针到char
const char * p;//p是一个指针指到const char

引用
一个引用就是某对象的另一个名字,而且在引用的时候必须进行初始化,extern可以表示该变量在别处进行了初始化
Int &z=p;//z和p同名

指向void的指针
一个指向任何类型对象的指针都是可以赋值给void*的。

Void*最重要的用途就是需要向函数传递一个指针,而又不能对对象的类型做出任何假设,它表示的就是一个空类型的指针对象。

结构
结构类型对象的大小未必是其成员对象大小之和。

忠告:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: