C++语法笔记 – 数组 指针与字符串
本文由发表于6年前 | C++ | 暂无评论 |  被围观 5,320 views+

数组


数组的声明:

数据类型 标识符[常量表达式1][常量表达式2]…


数组的使用:

数组名[下标表达式1][下标表达式2]…


数组的初始化:

int a[] = {1,1,1};
int a[][3] = {1.2.3.4.5.6}
int a[2][3] = {{1,2,3},{4,5,6}};


数组作为函数的参数:

使用数组名传递数据时,传递的是地址。


对象数组:

声明一个一维对象数组的方法:

类名 数组名[下标表达式];

访问对象的成员:

数组名[下标].成员名

指针


指针也是先声明后使用,声明指针的语法形式是:

数据类型 *标识符;


与地址相关的运算:* 和 &

*称为指针运算符,表示获取指针所指向的变量的值,这是一二一元操作符
& 称取地址运算符


指针的赋值:

声明指针的同时进行初始化赋值:

存储类型 数据类型 * 指针名 = 初始地址;

在声明之后单独使用赋值语句:

指针名 = 地址;


注意:

可以声明指向常量的指针,此时不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外ide对象。
可以声明指针类的常量,这时指针本市的值不能被改变

char const name = “Jason”

void类型的指针可以存储任何类型的对象地址:

void *pv = &i;
int *pint = (int *)pv
指针数组:

如果一个数组的每个元素都是指针变量,这个数组就是指针数组。指针数组的每个元素都必须是同一类型的指针。


声明一维指针数组的语法形式:

类型名T  *数组名[下标表达式];
int line1[] = {1,2,3};
int line2[] = {1,2,3};
int line3[] = {1,2,3};
int *p_line[3];
p_line[0] = line1;
p_line[1] = line2;
p_line[2] = line3;
cout << p_line[0][1];  //该句输出为line1数组的第二个元素2
用指针作为函数的参数:

如果以指针作为形参,在调用时实参将传递给形参,也就是使用实参和形参指针变量指向同一内存地址。

返回指针的函数:
数据类型 *函数名(参数表){函数体}
指向函数的指针:

函数指针是专门用来存放函数代码首地址的变量。

声明一个函数指针的方法:

数据类型 (*函数指针名) (形参表)

赋值:

函数指针名 = 函数名;
void print_message(float data_to_print);
void (*function_pointer)(float);
function_pointer = print_message;
function_pointer(1.0);
对象指针:

对象指针遵循一般变量指针的各种规则,声明对象指针的一般语法为:

类名 *对象指针名;

使用指针访问对象成员:

对象指针名 -> 成员名
class A;   //前行引用声明
classs B{A *a};  //如果改为class B{A a};则错误,因为类A的定义尚不完整
class A{B b};


指向类的非静态成员的指针

指向对象成员的指针使用前夜要先声明,再赋值,然后引用。
声明共有数据成员和函数成员的指针:

类型说明符 类名 :: *指针名;
型说明符 (类名 :: *指针名)(参数表);

赋值:

指针名 = &类名 :: 数据成员名
指针名 = &类名 :: 函数成员名

使用:

对象名.*类成员指针名   或   对象指针名 -> *类成员指针名
(对象名.*类成员指针名)(参数表)或(对象指针名->*类成员指针名)(参数表)


指向类的静态成员的指针

对类的静态成员的访问时不依赖与对象的,因此可以用普通的指针来指向和访问静态成员:

在Point类中定义:
public:
	static int countP;
	…
创建指针:
int *count = &Point :: countP;
动态内存分配:


new运算符和delete运算符:

在C++程序中建立和删除堆对象使用两个运算赋:new 和 delete

运算符new的功能时动态分配内存,或者称为动态创建堆,返回指针:

int *point;  point = new int(1);

运算符delete用来删除由new建立的对象,释放指针所指向的内存空间,格式为: delete 指针名;

Point *p = new Point;
delete p;   //其中Point为对象

Point *P = new Point[2];
p[0].Move(1,2);
delete []p;
浅拷贝与深拷贝:
浅拷贝:拷贝的对象的成员指针指向的是同一个内存地址。
深拷贝:为复制的对象重新声明新的成员和函数
字符串:


字符数组存储和处理字符串:

字符数组的声明与赋值:

static char str[8] = {‘p’,’r’,’o’,’g’,’r’,’a’,’m’,’\0’};
static char str[] = “program”;

字符串处理函数:

cstring头文件中:strcat(连接)、strcpy(复制)、strcmp(比较)、strlen(求长度)、strlwr(转换为小写)、strupr(转换为大写)。

string类:


(1)构造函数原型

string();
string(const string &rhs);
string(const char *s);
string(const string &rhs, unsigned int pos, unsigned int n);
string(const char *s, unsigned int n);
string(unsigned int n, char c);


(2)常用成员函数功能简介

string append(const char *s);
string assign(const char *s);
int compare(const string& str) const;
string& insert(unsigned int p0, const char *s);
string substr(unsigned int pos, unsigned int n) const;
unsigned int find(const basic_string& str) const;
unsigned int length() const;
void swap(string& str);
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/c-syntax-notes-array-of-pointers-and-strings.html
关键字: , , ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 9/4
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
C++推荐专题
C++
文章评论
    没有评论
给我留言

有人回复时邮件通知我
C++的相关文章
随机文章 本月热门 热评
1 代码中有99个bug 2014/7/14
2 HTTP请求中的User-Agent 判断浏览器类型的各种方法 网络爬虫的请求标示 2013/8/12
3 Java基础笔记 – 线程同步问题 解决同步问题的方法 synchronized方法 同步代码块 2011/10/24
4 Java中BerkeleyDB的基本使用例子 环境配置 创建数据库 插入数据 2012/5/16
5 【转】关于用户体验的三个反思 2013/11/6
6 Sping使用单实例化简化多线程相关实现 事务 模板与回调 2014/4/7
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.