sizeof

你必须知道的指针基础-6.内存的初始化及结构体的使用

孤者浪人 提交于 2020-03-08 20:58:55
一、内存的使用 1.1 你创建的内存区域可能是脏的   当我们创建一个内存区域的时候,内存中的数据可能是乱七八糟的(可能是其他代码用过后遗留的数据),如下面一段代码: int main(int argc, char *argv[]) { // 下面申请的20个字节的内存有可能被别人用过 char chs[20]; // 这个代码打印出来的可能就是乱码,因为printf的%s是“打印一直遇到'\0'”。 printf("%s\n",chs); return 0; }   其运行结果是如下图所示的乱码,因为printf的%s是“ 打印一直遇到'\0' ”。 1.2 解决脏内存区域的办法   那么,如何解决上面我们有可能会访问的脏内存区域呢?在C语言中,可以采用如下的两种方法:   (1)使用memset函数首先清理一下内存: void *memset(void *s, int ch, unsigned n); 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。   那么,我们可以使用memset函数来清理内存,即填充创建的这块内存区域: int main(int argc, char *argv[]) { // 下面申请的20个字节的内存有可能被别人用过 char

第二次作业

独自空忆成欢 提交于 2020-03-08 20:24:56
1.1.4 1.视频笔记 2.学习视频遇到的问题 疑惑:这里的1和3,通过视频讲解我已经知道了他们是等价的,可是对2存在一些疑惑,请问老师,这里是1、3是等价的2、4是等价的这个意思吗 疑惑:对于第七行我有一些不明白 其中的 sizeof(a)/sizeof(a[0]) 不太明白它所要表达的意思 1.2.1 1。学习笔记 . 2.代码列表(两节的代码) 3.问题 这里不太明白,希望老师可以讲解一下 来源: https://www.cnblogs.com/lcy2001/p/12444490.html

C++指针小结

走远了吗. 提交于 2020-03-08 19:25:19
/*--> */ /*--> */ 一、指针基本概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。学习指针必须了解如下四个内容: 1 指针的类型:去掉标识符,指针的类型对于机器而言都是一样的 2 指针指向的类型:去掉标识符和左边的 * 3 指针的值:一个 32 位的数值(一般是内存地址) 4 指针指向的内存区域:指针的值代表指针指向内存区域的首地址,指针指向的类型决定了该内存区域的大小。指针的移位操作和指针指向的类型有关动,指针一次移动一个 sizeof (指针指向的类型)大小。      (1)int*ptr =0;// 指针的类型是 int* 指针所指向的类型是 int ,指针的值为 0 (非法地址)表示指针未指向合法内存。    (2)int**ptr;// 指针的类型是 int** 指针所指向的的类型是 int*    (3)int(*ptr)[3];// 指针的类型是 int(*)[3] 指针所指向的的类型是 int()[3]    (4)int*(*ptr)[4];// 指针的类型是 int*(*)[4] 指针所指向的的类型是 int*()[4] 二、指针相关的运算: 1& :取地址运算符,返回结果是一个指针(地址值都可以转换为指针), &a 的运算结果是一个指针,指针的类型是 a 的类型加个 * ,指针所指向的类型是 a 的类型,指针所指向的地址

C++中有关数组的相关问题

夙愿已清 提交于 2020-03-08 18:24:02
1、数组长度相关: strlen(from <string.h>)只是针对字符数组才有的,他不包含\0的长度。无法对其他类型求长度。sizeof()则可以对\0发起作用。记住(a.length()这不是c++语言) 获取数组长度方法: 方法1: sizeof(array) / sizeof(array[0]); 方法2: 在C语言中习惯上在 使用时都把它定义成一个宏: #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 而在C++中则可以使用模板技术定义一个函数,比如: 方法3: template <class T> int getArrayLen(T& array) { return (sizeof(array) / sizeof(array[0])); } 【C语言】 #include <stdio.h> #include <stdlib.h> #define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} // 定义一个带参数的宏,将数组长度存储在变量len中 int main() {   char a[] = {'1','2','3','4'};   int len;    GET

第二次作业

风格不统一 提交于 2020-03-08 09:47:10
关于指针与数组以及指针运算的学习 1、视频笔记 2、编写的代码列表 3、存在的问题 (1)传入函数在参数表中的数组变成了什么? 解决办法:通过观看视频,了解到函数参数表中的数组就是指针。可以用数组的运算符【】进行运算。 sizeof(a)==sizeof(int*) (2) 图中代码为什么q+1运行结果地址加4,而p+1运行结果加1? 解决办法:通过观看视频以及亲自编写程序,明白了sizeof(char)=1,sizeof(int)=4 来源: https://www.cnblogs.com/wjb13579246/p/12437061.html

2020-03-03

喜你入骨 提交于 2020-03-08 07:09:08
int *p=NULL,式子说明 1、定义了一个指针变量p, 2、其所指向的内存里存放的是int型数据, 3、初始化p指向NULL(空内存)。 p=(int*)malloc(sizeof(int)) malloc(sizeof(int))这是通过malloc函数,申请了一个int类型的空间,通过malloc函数申请的空间,系统将返回该段空间的首地址,所以malloc(sizeof(int))的值是指针类型的,但由于p的指类是int,所以要将malloc(sizeof(int))的值强制转换为int类型的指针 来源: CSDN 作者: weixin_46362928 链接: https://blog.csdn.net/weixin_46362928/article/details/104627764

c++实验9 图及图的操作实验

我的梦境 提交于 2020-03-08 04:24:49
实验9 图及图的操作实验 --博客后半部分有程序的所有代码-- 1、图邻接矩阵存储结构表示及基本操作算法实现 (1)邻接矩阵存储结构类定义: #include "SeqList.h" //包含动态数组结构的顺序表类 #include "SeqQueue.h" //包含静态数组结构的顺序队列类 typedef char VerT; //定义邻接矩阵图类中的VerT class AdjMWGraph { private: SeqList Vertices; //顶点顺序表 int Edge[MaxVertices][MaxVertices]; //边权值数组 double numOfEdges; //边的个数 void DepthFirstSearch(const int v, int visited[]); void BroadFirstSearch(const int v, int visited[]); public: AdjMWGraph(const int sz=MaxVertices); //构造函数 ~AdjMWGraph(void){}; //析构函数 int NumOfVertices(void) //取顶点个数 {return Vertices.Size();} int NumOfEdges(void) //取边的个数 {return numOfEdges;}

NENUACM 2020 复健训练 #4 题解

白昼怎懂夜的黑 提交于 2020-03-08 02:31:52
题目链接 Search for Pretty Integers 题意:给你两行数(均是个位数),第一行有n个数,第二行有m个数,让你构造一个最小的数满足至少包含一个第一行里的数且至少包含一个第二行里的数。 思路:显然,如果两行数里有相同的数,那么答案就是这些相同的数里的最小值;否则,以第一行里的数为十位数,以第二行里的数为个位数枚举,然后以第二行里的数为十位数,以第一行里的数为个位数枚举,取最小值即可。 #include<bits/stdc++.h> #define mem(a,b) memset((a),b,sizeof(a)) #define de cout<<endl<<endl<<endl typedef long long ll; const int inf=0x3f3f3f3f; const int maxn=1e5+10; using namespace std; int a[15],b[15]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) scanf("%d",&b[i]); int ans=100; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if

C语言 memcpy二维数组的复制

六月ゝ 毕业季﹏ 提交于 2020-03-07 09:10:25
int main(void) { int src[][3]={{1,2,3},{4,5,6},{7,8,9},{1,2,3},{4,5,6},{7,8,9}}; int des[6][3]={0,0};//要小心,行数固定 printf("%d",sizeof(src)); print(src,6,3); memcpy(des,src,sizeof(src)); print(des,6,3); return 1; } https://www.cnblogs.com/shuqingstudy/p/4733307.html 来源: CSDN 作者: enjoyfate 链接: https://blog.csdn.net/u014683488/article/details/104708917

C/C++中获取数组的长度

試著忘記壹切 提交于 2020-03-07 08:46:46
C/C++中没有提供直接获取数组长度的函数。 对于存放字符串的字符数组,可用strlen函数获取长度 。 如:char a[]="hello world";int count = strlen(a); 对于其他类型的数组,可使用sizeof(array)/sizeof(array[0]),计算长度。 在C中,可在使用时把它定义成宏, #define GET_ARRAY_LENGTH(array,len){len=(sizeof(array)/sizeof(array[0]));} 在C++中,可使用模板技术,定义这个函数, 需要将数组参数作为引用类型传递,否则数组名称会退化为一个指针 ,这样就无法计算数组的大小sizeof(a)。 template<class T> int GetArrayLen(T& a) { return sizeof(a)/sizeof(a[0]); } 对于存放字符串的字符数组,也可以使用这种方法来计算长度,但是计算后的值需要减去1, 即sizeof(a)/sizeof(a[0])-1,因为字符串默认带有结束符号'\0' 使用示例如下: C语言: #include<stdio.h> #define GET_ARRAY_LENGTH(array,len){len=(sizeof(array)/sizeof(array[0]));} int main() {