C++笔记--指针数组和结构
2016-05-24 14:49
260 查看
指针
类型为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语言】指向指针的指针变量对字符串进行排序
- c++工程里一个文件怎么调用另外一个文件里的函数
- C语言获取系统时间 & 精度
- C++ 迭代器
- C/C++ Volatile关键词深度剖析
- c++的一些优化技巧
- C++中char类型的溢出问题
- C/C++中字符串存储位置
- STL之vector
- C++ 使用文件映射
- C++内联函数详解
- 穿越雷区第六届蓝桥杯大赛个人赛决赛(C语言A组)第四题
- C语言字符串数组与字符串指针详解
- C,C++宏中#与##的讲解
- 在c++中用while(cin)的问题
- socket 简单聊天程序
- c++虚函数问题
- 指针的顶层和底层const对指针的引用的影响
- 跨平台的C++应用和UI开发库 QT
- 跨平台的C++应用和UI开发库 QT