c++ 数组

前言:

数组用于处理同类型数据的集合,它是把相同格式类型的数据元素组合到一起的的容器或者说是工具。有了数组这个工具,我们的代码和编程工作变得极为方便,不用一个一个定义数据了。一个数组在内存中占据一片连续的存储单元。

一、数组知识总结及使用过程中的注意事项:

1、数组大小必须是指值为正的常量,不能为变量。一旦定义不能改变大小。
2、数组大小最好用宏来定义。
3、数组定义后需要赋初值,不然仍然是随机数。
4、 对数组的赋值可用循环来做,二维数组用循环嵌套赋值或是输入输出。包含在头文件#include中的函数memset可以对数组进行清零处理,但不可以对整型变量进行正常赋值,因为memset是对字节赋值的,对char类变量单个赋值是没有问题的。
5、int a[5]={}表示数组中的5个元素都初始化为0。int a[10]={0,1,2}表示对数组前三个元素赋值为0.1.2,其余元素赋值为0。

二、关于字符数组

1、举例:'a’表示一个字符,只有字符a,而"a"是字符串,包含a和\0。引用字符空格应用单引号。

2、输入问题:由scanf得到的字符串不会有空格,回车即使下一段。使用gets只能输入一个字符串,可以得到包含空格的字符串。个人感觉做题的时候scanf比cin好用,效率更高。

3、puts语句输出一个字符串和一个换行符。

三、访问数组元素

int arr1[3] = {1, 2, 3};  //满初始化
int arr2[] = {1, 2, 3}; //省略数组大小,由元素个数决定;
int arr3[3] = {1, 2}; //缺少的默认为0
int arr4[3] = {1, 2, 3, 4}; //错误,不能超过数组长度  
char arr5[3] = {'a', 98, 'c'};//因为是字符类型,所以98其实就是字符'b'
char arr6[] = "abcdef";   //直接用双引号写字符串

数组元素可以通过数组名称加索引进行访问。元素的索引是放在方括号内,跟在数组名称的后边。
数组是使用下标来访问的,下标是从0开始。
数组的大小可以通过计算得到。(size = sizeof(arr)/sizeof(arr[0]));

#include "stdafx.h"

int main()
{
    //int变量先定义后初始化
    int a;
    a = 10;
    //变量a的大小就是int的大小
    printf("sizeof(a) = %d\n", sizeof(a));
    printf("sizeof(int) = %d\n", sizeof(int));
    

    int arr[10]={0};  //a[0]--a[9]  
    printf("sizeof(arr) = %d\n", sizeof(arr)); //sizeof(arr)等于求解int*10大小

for(int i=0;i<10;i++) { arr[i] = a++; //循环打印每个地址的数据,以及相应的地址 printf("arr[%d]=%d,addr:%p\n", i, arr[i],&arr[i]); } getchar(); return 0; }

补充:结构体的作用

  • 在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
  • 结构体在函数中的作用不是简便,最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
#include <iostream> 

using namespace std;

struct SAMPLE
{
    int x;
    int y;
    int add() {return x+y;}
}s1;

int main()
{
    cout<<"没初始化成员变量的情况下:"<<s1.add()<<endl;
    s1.x = 3;
    s1.y = 4;
    cout<<"初始化成员变量的情况下:"<<s1.add()<<endl;
    system("pause");
    return 0;
}
=>没初始化成员变量的情况下:0
  初始化成员变量的情况下:7

struct Student
    {
        int a;
    }stu1;//stu1是一个变量
typedef struct Student2
    {
        int a;
    }stu2;//stu2是一个结构体类型
//使用时可以直接访问stu1.a
//但是stu2则必须先 stu2 s2;
//然后 s2.a=10;
#include <iostream> 

using namespace std; 

typedef struct _point{ 
           int x; 
           int y; 
}point; //定义类,给类一个别名 
struct _hello{ 
           int x,y; 
} hello; //同时定义类和对象 
int main() 
{ 
   point pt1; 
   pt1.x = 2; 
   pt1.y = 5; 
   cout<< "ptpt1.x=" << pt1.x << "pt.y=" <<pt1.y <<endl; 
   //hello pt2; 
   //pt2.x = 8; 
   //pt2.y =10; 
   //cout<<"pt2pt2.x="<< pt2.x <<"pt2.y="<<pt2.y <<endl; 
   //上面的hello pt2;这一行编译将不能通过. 为什么? 
   //因为hello是被定义了的对象实例了. 
   //正确做法如下: 用hello.x和hello.y 
   hello.x = 8; 
   hello.y = 10; 
   cout<< "hellohello.x=" << hello.x << "hello.y=" <<hello.y <<endl; 
   return 0; 
}

 

 

参考链接:https://blog.csdn.net/weixin_43238423/article/details/85219289 

     https://blog.csdn.net/baidu_34933057/article/details/100983504

posted on 2020-03-01 20:56  玩转机器学习  阅读(679)  评论(0编辑  收藏  举报