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*最重要的用途就是需要向函数传递一个指针,而又不能对对象的类型做出任何假设,它表示的就是一个空类型的指针对象。
结构
结构类型对象的大小未必是其成员对象大小之和。
忠告:
类型为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*最重要的用途就是需要向函数传递一个指针,而又不能对对象的类型做出任何假设,它表示的就是一个空类型的指针对象。
结构
结构类型对象的大小未必是其成员对象大小之和。
忠告:
相关文章推荐
- c++静态成员变量问题
- VC++常见调试错误
- 94. Binary Tree Inorder Traversal #Medium
- 三色旗问题
- C/C++中unsigned char和char的区别
- c++与java互相进行3des加解密
- sort排序C++
- C++的配置项
- iOS之文本处框架CoreText(C语言的框架)
- C语言之内存分配与释放:malloc, calloc, realloc & free
- C++之动态空间分配与释放:new & delete
- VC++异常处理
- C++异常处理
- C++作业6——数组合并、矩阵求和
- c++(重载等号=操作为深拷贝)
- C++primer_第八章_IO库_学习跟踪
- opencv:求一幅图片的LBP纹理图(c++版本)
- c++作业6
- POJ2418 二叉排序树 && 字典树写法
- 初识lambda表达式