`
oolala
  • 浏览: 103673 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
09c341db-7f05-3f2b-a572-9ee69a5d8a77
unix环境高级编程
浏览量:22835
社区版块
存档分类
最新评论

c++ primer 4 数组和指针

    博客分类:
  • c++
 
阅读更多
1 数组
显式初始化数组
int ia[3] = {1,2,3};
如果没有显式提供元素初值,则数组元素会像普通变量一样初始化
a)如果函数体外定义的内置数组,其元素均初始化为0
b)在函数体内定义的内置数组,其元素无初始化
 
不允许数组直接复制和赋值
 
数组操作
a)数组下标类型是size_t
 

 
2 指针
指针概念:指针用于指向对象。与迭代器一样,指针提供对其所指对象的间接访问,只是指针结构更通用
指针保存的是另一个对象的地址:
string s("hello word");
string *sp = &s;
定义 了一个指向stirng类型的指针sp,并初始化sp使其指向string类型的对象s
*sp 中的*操作符表明sp是一个指针变量,&s中的&符号是取地址操作符,当此操作符用于一个对象上,返回的是该对象的存储地址。
 
 
指针的定义和初始化
1)对象变量的定义
vector<int> *pvec;
int * ip1,ip2;
string * pstring;
double *dp;
 
理解指针声明语句时,请从右向左阅读
 
string *psring
把pstring定义为一个指向string类型对象的指针变量
 
指针的可取值
一个有效的指针必须是以下三种状态:
保存一个特定对象的地址
指向某个对象的另一个对象
0值
int *pi = 0;
 
 
避免使用未初始化的指针
建议程序员在使用之前初始化所有变量,尤其是指针
 
 
void*指针
C++提供了一种特殊的指针类型void* 它可以保存任何类型对象的地址
void*表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型
 
4.2.3指针操作
对指针进行解引用可访问它所指的对象,*操作符(解引用操作符)将获取指针所指的对象
int main()
{
int a = 10;
int *p = &a;
cout << *p <<endl;
cout << *p + 1 <<endl;
return 0;
}
 
1 生成左值的解引用操作
解引用操作符返回指定对象的左值,利用这个功能可修改指针所指对象的值
        string s = "good";
string s2 = "nice";
string *sp = &s;
sp = &s2;
cout << *sp <<endl;

 

    
关键概念:给指针赋值或通过指针进行赋值
如果对左操作数进行解引用,则修改的是指针所指对象的值
如果没有使用解引用操作,则修改的是指针本身的值。
 
4.2.4使用指针访问数组元素
    C++语言中,指针和数组密切相关。特别是在表达式中使用数组名时,该名字会自动转换为指向数组第一个元素的指针
    int ai[] = {0,2,4,6,8}
    int *ip = ia;
 
 
 

4.3 C网络字符串
    字符串字面值的类型是字符常量的数组
    字符串字面值的类型就是const char 类型数组
    C风格字符串是以空字符null结束的字符数组
 
    1C网络字符串的使用
    C++语言通过(const)char *类型的指针来操纵C网络的字符串
    一般来说,我们使用指针的算术操作来遍历C网络字符串,每次对指针进行测试并递增1,直到到达结束符null为止:
    
int main(void)
{
const char *p = "hello point";
while(*p)
{
cout << *p <<endl;
p++;
}
return 0;
}
 
    2 C网络字符串的标准库函数
    #include <cstring>
    cstring是string.h头文件的C++版本
int main(void)
{
const char *a = "this is a good man";
const char *b = "my name is C++";
int i = strcmp(a,b);
cout << i <<endl;
 
cout << strlen(a) << endl;
return 0;
}
 
    3 在使用处理c网络字符串的标准库函数时,牢记字符串必须以结束符null结束
    
    4 传递给标准库函数strcat strcpy的第一个实参数组必须具有足够大的空间存放新生成的字符串
 
    5 如果必须使用C网络字符串,则使用标准库函数strncat 和strncpy比strcat和strcpy更安全
 
    6 尽可能使用标准库类型string
 
 
4.3.1创建动态数组
    动态分配的数组将一直存在,直到程序显式释放它为止
    
    1动态数组的定义
    int *pia = new int[10];
 
    2 初始化动态分配的数组
    string *psa = new string[10];
    int *pia = new int [10];
    分配了存储10个int对象的内存空间,但这些元素没有初始化
  
     int *pia2 = new int[10]();
    圆括号要求编译器对数组做值初始化,在本例中即把数组元素都设置为0
 
    4 允许动态分配空数组
    之所以要动态分配数组,是由于编译时不知道数组长度
    
    5 动态空间释放
    delete [] pia;
 
    6 动态数组的使用
    通常是因为在编译时无法知道数组的维数,所以才需要动态创建数组。
    

习题4.28
从标准输入设置读入的元素数据建立一个int型vector对象,然后动态创建一个与该vector对象大小一致的数组
把vecotr对象所有元素复制给新数组
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
using std::vector;
using std::string;
 
int main()
{
vector<int> ivec;
int ival;
 
cout << "ctrl+z end input" << endl;
while(cin >> ival)
{
ivec.push_back(ival);
}
 
//动态创建数组
int *pia = new int[ivec.size()];
//复制元素
int *tp = pia;
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end();++iter,++tp)
{
*tp = *iter;
cout << *tp << endl;
}
 
delete [] pia;
return 0;
}
 
 
 
习题 4.30
编写程序连接二个C风格字符串字面值,把结果存储在一个C风格字符串中。
int main()
{
const char *s1 = "c++ primer";
const char *s2 = "apple";
size_t len = strlen(s1) + strlen(s2);
char *result_str = new char[len + 1];
strcpy(result_str,s1);
strcat(result_str,s2);
 
cout << result_str <<endl;
delete result_str;
return 0;
}
 
分享到:
评论

相关推荐

    C++ Primer第四版【中文高清扫描版】.pdf

    3. C++的数组和指针操作,以及如何处理C风格字符串和多维数组。 4. 表达式中涉及到的算术、关系、逻辑、赋值、自增自减等操作符的使用,以及类型转换的相关规则。 5. 语句的书写,包括if、switch、while、for、do ...

    C++Primer(第4版)-课后习题答案.pdf

    4. 第四章数组和指针:讨论一维和多维数组,以及指针的概念,包括指针的声明、赋值、解引用,以及指针与数组的关系。 5. 第五章表达式:涵盖算术、比较、逻辑、赋值等不同类型的表达式,以及运算符的优先级和结合性...

    C++Primer Plus附录源码等文件.zip

    《C++ Primer Plus》是Stephen Prata撰写的一本广受欢迎的C++编程教材,第六版提供了深入浅出的C++语言教程,旨在帮助初学者和有一定经验的程序员掌握这一强大的编程语言。附录中的源码文件是作者为配合书中的教学...

    C++Primer 第四版课后习题解答(第1~18章完整答案)完整版

    《C++ Primer 第四版》是一本经典的C++学习书籍,涵盖了从基础到高级的各种主题。这份课后习题解答提供了第1至18章的完整答案,旨在帮助读者深入理解书中的概念并提高编程技能。 第一章“快速入门”引导读者进入C++...

    C++primer第五版英文版

    书中从基础的数据类型和控制结构开始讲起,逐步深入到函数、数组和指针的高级用法,接着探讨面向对象编程的基本概念,包括类和对象、继承与多态等,最后对C++的模板编程、异常处理和标准库等高级特性进行了详细说明...

    C++ primer 4th Edition 英文版

    《C++ Primer 4th Edition》是C++编程语言领域中的经典入门教程,由Lippman、Lajoie和 Moo三位作者共同编写。这本教材以其深入浅出的讲解方式和丰富的实例,深受广大C++初学者和专业开发者的喜爱。在第四版中,作者...

    C++ primer plus 课后习题答案

    《C++ Primer Plus》是一本深受程序员喜爱的C++学习书籍,它深入浅出地介绍了C++编程语言的基础和高级特性。课后习题是学习过程中不可或缺的一部分,它们旨在帮助读者巩固理论知识,提高实际编程技能。这个压缩包...

    c++ primer有目录pdf第五版本5th

    《C++ Primer》是有名的C++编程教材,其第五版(5th Edition)深入浅出地介绍了C++语言的基础知识以及C++11新标准的特性。这本书由Lippman、Lajoie和 Moo三位作者共同编写,是C++初学者和进阶者的重要参考书籍。 1....

    C++Primer第四版完整答案

    C++ Primer第四版涵盖了C++的基本语法,包括变量、数据类型、运算符、控制流(如if语句和循环)、函数、数组和指针等基础知识。这些内容构成了任何C++程序员的坚实基础。 接着,书中深入讲解了类和对象的概念,这是...

    C++ primer plus课后编程练习题答案

    本书涵盖了 C++ 语言的所有方面,包括基本语法、数据类型、函数、数组、指针、类和对象、继承、多态、模板、异常处理等,提供了大量的编程练习题和答案,帮助读者巩固所学知识。 目录中的每一章都包含了详细的理论...

    C++ primer 5e 课后答案

    4. **数组与向量**:数组是固定大小的数据集合,而std::vector是动态大小的容器,两者都是存储和管理元素序列的方式。向量提供了更灵活的内存管理和操作接口。 5. **指针**:C++中的指针是内存地址的别名,理解指针...

    c++ primer plus 第六版 课后习题答案

    首先,C++ Primer Plus第六版覆盖了C++的基础语法,包括变量、数据类型、运算符、控制结构(如条件语句和循环)、函数、数组、字符串等基本概念。在解答这些习题时,读者可以复习这些基础知识,并通过实践来提高编程...

    c++primerplus 课后习题答案

    本资源提供了一个非常全面的 C++primer plus 课后习题答案,涵盖了 C++ 编程语言的多个方面,包括变量、数据类型、运算符、控制流语句、函数、数组、指针、字符串、结构体、枚举类型和文件输入/输出等。通过这些答案...

    C++Primer sourse Code

    通过阅读和运行这些代码,你可以了解到C++的基本语法,如变量、运算符、控制流(if语句、循环等)、函数、数组和指针的使用。 在类和对象部分,源代码展示了如何定义和使用类,包括构造函数、析构函数、成员函数、...

    谭浩强C++ c++primer 课后题答案代码

    谭浩强老师的书主要介绍了C++的基础知识,包括变量、数据类型、运算符、流程控制、函数、数组、指针等基本概念,以及类和对象等面向对象编程的核心内容。C++ Primer则更深入地探讨了模板、异常处理、STL(标准模板库...

    C++ Primer Plus 第五版源程序

    《C++ Primer Plus 第五版源程序》是学习C++编程语言的重要参考资料,它包含了该经典教材中的所有示例代码和练习程序。这些源码旨在帮助读者深入理解C++的各种概念和技术,通过实际操作和调试代码,提升编程技能。...

    C++ Primer 3完美中文版及题解

    1. **基础语法**:包括变量、数据类型、运算符、控制流(如if语句、循环)、函数、数组和指针。 2. **对象和类**:讲解面向对象编程的核心概念,如封装、继承和多态,以及构造函数、析构函数、友元和访问控制。 3....

    c++ primer 5th edition

    本书的章节安排由浅入深,从基本语法和数据类型开始,逐步引导读者理解控制流程、函数、数组和指针等核心概念。特别地,书中强调了理解指针是掌握C++的关键,因为指针在C++中扮演着内存管理和高效编程的重要角色。 ...

    C++ primer(第四版)中英文附源代码

    C++ Primer第四版覆盖了C++的基础概念,如变量、控制流(条件语句和循环)、函数、数组和指针等。这些基本元素构成了C++编程的基础,通过学习,读者可以掌握如何有效地组织和管理程序数据,以及如何控制程序的执行...

    C++ Primer Plus(第6版) 课后题答案

    以上是针对C++ Primer Plus(第6版)部分课后题的详细解析,涵盖了结构体、指针、字符串处理、数组、循环等多种核心概念和技术点。通过这些练习,可以加深对C++基础语法的理解,并提升编程实践能力。

Global site tag (gtag.js) - Google Analytics