使用new方法来声明和创建的量属于动态创建,不同于直接申请或者声明变量,
使用new 是一种动态联编方法,在程序执行的过程中执行的语句,当未用到该变量的时候,在内存中不会先被开辟空间,
直接申请或者什么变量 属于静态联编方法,在编译时就已经申请和占用了程序运行的空间,不管该变量是否被用到,都会占用内存。
申请一个动态的数组
数组名和指针的区别
数组名是一个常量 , 是一个指向固定地址的指针,因此不可以进行修改和赋值
但是指针是一个可以改变的值,可以被进行数值的运算和改变
cout 语句在打印一个字符串的时候 其实传递过去的是该字符串的一个首地址
cout << "zhe shi yi ge zi fu chuan " 其实cout接收到的是一个字符串的首地址
那么我们就可以用以下的方式 其实背后的逻辑是相同的
char str1[20] = “zhe shi yi ge zi fu chuan”
cout << str1
cout << 只有在遇到是char类型的地址的时候才不打印地址打印字符串中的内容直到遇到 \0 为止,
那么如果想要答应出char类型的字符串的地址,只需要进行强制类型转换即可
cout << (int * ) str1 即可打印出该字符串的首地址
const char * pt = " hello" ;
这条语句的意思是 声明了一个char型的常量指针 但是并不是说该指针是常量 而是该指针指向的内容是常量 也就是说该指针所指向的地址可以被修改,该指针可以指向不同的地址,但是该指针所指向地址中的内容不可以通过这个指针加解引用的方式或者其他方式进行修改 。
对于结构体也可以使用new的方式来创建新的结构体和结构体指针
对于新创建的结构体指针在访问成员变量时需要使用 -> 运算符
对于新创建的结构体访问成员变量时使用 . 运算符
关于指针的类型匹配问题
指向指针的指针的
关于C++ 中的cin.getline() 和 geitline()
当捕获的字符放在字符数组时,常常用cin.getline( array , size)
当捕获的字符房子string类中的时候, 可以使用getline( cin , array)
#include <iostream>
struct antarctica_years_end
{
int year;
};
int main(void)
{
antarctica_years_end s01, s02, s03;
s01.year = 1998;
antarctica_years_end * pa = &s02;
pa->year = 1999;
antarctica_years_end trio[3];
trio[0].year = 2003;
std::cout << trio->year << std::endl;
const antarctica_years_end * arp[3] = {&s01, &s02, &s03};
std::cout << trio->year << std::endl;
const antarctica_years_end ** ppa = arp; // 定义了一个指向结构体类型的指针的指针 第一层指针 指向结构体 第二层指针 指向第一层指针
/* 那么对于这个语句来讲
ppa是一个双层指针 经过一层解引用 *ppa 以后对应的 是一个指向结构体的指针 对应的就是数组中的元素
那么arp对应的是一个存放了结构体地址的数组的指针 那么首先需要一个指针与其相对应 这便是 第一层指针 那么此时是没有与之对应的数据类型的
因此需要进行第二层解引用 此时的变量整体类型就是结构体了 因此需要进行两次解引用
*/
auto ppb = arp;
std::cout << (*ppa)->year << std::endl;
std::cout << (*(ppb + 1 ))->year << std::endl;
return 0;
}