当前位置: 首页 > news >正文

网站开发的业务需求分析有网站建wap

网站开发的业务需求分析,有网站建wap,食品类网站设计,太原网站建设价格套餐1一维数组 1.1一维数组的创建和初始化 1.1.1数组的创建 //代码1 int arr1[10]; char arr2[10]; float arr3[1]; double arr4[20]; //代码2 //用宏定义的方式 #define X 3 int arr5[X]; //代码3 //错误使用 int count 10; int arr6[count];//数组时候可以正常创建&#xff1…

1一维数组

1.1一维数组的创建和初始化

1.1.1数组的创建

//代码1
int arr1[10];
char arr2[10];
float arr3[1];
double arr4[20];
//代码2
//用宏定义的方式
#define X 3
int arr5[X];
//代码3
//错误使用
int count = 10;
int arr6[count];//数组时候可以正常创建?

:数组创建, [] 中要给一个常量才可以,不能使用变量。可以直接用常量,或者使用宏定义。

1.1.2数组的初始化

//1.数组大小和数值个数一致
int arr1[5] = {1,2,3,4,5}; 1 2 3 4 5//2.数组大小大于初始数
int arr2[6] = {1,2,3};  1 2 3 0 0 0//3.不指定数组大小
int arr3[] = {1,2,3,4};  1 2 3 4//4.不指定字符数组大小
char arr5[] = {'a','b','c'}; a b c//5.1字符数组存储字符串
char arr6[] = "abcdef"; a b c d e f \0//5.2字符数组的大小和字符串字符个数一致时
char arr6[6] = "abcdef"; a b c d e f
!!这样初始化是有问题的,因为无法正常读取字符串的结束标志('\0'),导致字符串的长度和内容不能得知!!//6.字符数组大小大于字符串中的字符数char arr7[6] = "zxc"; z x c \0 \0 \0

结论

  1. 数组是具有相同类型的集合,数组的大小(即所占字节数)由元素个数乘以单个元素的大小。
  2. 数组只能够整体初始化,不能被整体赋值。只能使用循环从第一个逐个遍历赋值。
  3. 初始化时,数组的维度或元素个数可忽略 ,编译器会根据花括号中元素个数初始化数组元素的个数。
  4. 当花括号中用于初始化值的个数不足数组元素大小时,数组剩下的元素依次用0初始化。
  5. 字符型数组在计算机内部用的时对应的ascii码值进行存储的。
  6. 一般用”“引起的字符串,不用数组保存时,一般都被直接编译到字符常量区,并且不可被修改。

在内存中的存储

 1.2一维数组的使用

#include <stdio.h>
int main()
{int arr[10] = { 0 };//数组的不完全初始化//计算数组的元素个数int sz = sizeof(arr) / sizeof(arr[0]);//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:int i = 0;//做下标,此时可以是变量for (i = 0; i < 10; i++){arr[i] = i;}//输出数组的内容for (i = 0; i < 10; ++i){printf("%d ", arr[i]);}return 0;
}

注意:

sizeof()操作符用于取长度,以字节为单位。sizeof(数组名)即求的时整个数组的大小。sizeof(首元素)即求数组单个元素大小。用0下标,是因为数组至少存在一个有效元素,所以0下标永远存在。
数组是使用下标来访问的,下标是从0开始。
数组的大小可以通过计算得到。建议采用sizeof(arr)/sizeof(arr[0])这种方式。

1.3一维数组在内存中的存储

#include <stdio.h>
int main()
{int arr[10] = { 0 };int size = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < size; ++i){printf("&arr[%d] = %p\n", i, &arr[i]);}return 0;
}

仔细观察输出的结果,可知随着数组下标的增长,元素的地址,也在有规律的递增。 由此可以得
出结论:数组在内存中是连续存放的

 

总结:

  1. 数组在内存中开辟是线性连续且递增的。
  2. 在c语言中,任何变量(基本变量,指针变量,结构体变量,数组变量)的空间都是整体开辟,但任何元素的起始地址一定是开辟字节当中最小的。

 2.二维数组

2.1二维数组的创建和初始化

2.1.1二维数组的创建

//数组创建
int arr[3][4];//[行数][列数]
char arr[][5];
double arr[2][4];

 二维数组创建时,行数可以忽略不写。并且所有维度的数组其第一个方括号的内容可忽略。

2.1.2二维数组的初始化

//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};
int arr[][4] = {{2,3},{4,5}};

注意:
花括号中的一个花括号代表一个一维数组的初始化。当里面无花括号分组时,按照顺序从第一个开始逐个进行初始化。余下的未赋值的元素用0初始化。

2.2二维数组的使用

二维数组的使用也是通过下标的方式,用双重循环嵌套进行索引使用。

#include <stdio.h>
int main()
{int arr[3][4] = { 0 };int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 4; j++){arr[i][j] = i * 4 + j;}}for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 4; j++){printf("%d ", arr[i][j]);}}return 0;
}

2.3二维数组在内存中的存储

#include <stdio.h>
int main()
{int arr[3][4];int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 4; j++){printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);}}return 0;
}

通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。

 

注意:

  1. 二维数组在内存的空间布局上,也是线性连续且递增的!!!
  2. 二维数组本质上也是一维数组,只不过内部元素放的是一维数组

3.数组作为参数

  1. 调用函数传参数组时,减少函数传数组时的成本问题(时间和空间)。因为传参时,需要临时拷贝,如果数组过大,可能会浪费资源,严重的话可能栈溢出。
  2. 数组元素降维成指向数组内部元素类型指针
  3. 对指针加一,加上所指向的类型的大小。

 3.1一维数组

#include<stdio.h>void Lisa(int arr[])
{printf("a = %d\n", sizeof(arr));//数组降维成指针后的指针大小,在32位系统下指针都为4字节printf("b = %d\n", sizeof(arr[0]));//数组首元素的大小printf("sz =a / b  = %d\n", sizeof(arr) / sizeof(arr[0]));//大小为1printf("arr = %p\n", arr);//数组首元素地址printf("&arr = %p\n", &arr);//指针的地址printf("arr + 1 = %p\n", arr + 1);//下一个元素的地址printf("&arr + 1 = %p\n", &arr + 1);//指针下一项的地址
}int main(void)
{int Shuzu[10] = { 0,1,2,3,4,5,6,7,8,9 };printf("a = %d\n", sizeof(Shuzu));//数组总大小printf("b = %d\n", sizeof(Shuzu[0]));//数组首元素大小printf("sz =a / b = %d\n", sizeof(Shuzu) / sizeof(Shuzu[0]));//数组元素个数printf("Shuzu = %p\n", Shuzu);//数组首元素地址printf("&Shuzu = %p\n", &Shuzu);//代表整个数组,但是地址仍是首元素地址printf("Shuzu + 1 = %p\n", Shuzu + 1);//下一个元素的地址printf("&Shuzu + 1 = %p\n", &Shuzu + 1);//跳过整个数组后紧挨着的地址//此时该地址减去首元素地址等于数组大小printf("\n\n");Lisa(Shuzu);return 0;
}

补充

  1. sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。
  2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组。

 

 

总结:

  1. 形参格式,例如int arr[ ]或者int *arr,两者等价
  2. 形参元素个数可被忽略,并且建议忽略(有可能改变了实参的大小,这样比较方便)。或者也可以填写比实参元素个数大的值。
  3. sizeof()求数组元素个数时,尽量在数组定义时求。因为传参后数组会降维成指针。

 3.2二维数组

#include<stdio.h>void Lisa(int arr[][4])
{printf("a = %d\n", sizeof(arr));//数组降维成指针后的指针大小,在32位系统下指针都为4字节printf("b = %d\n", sizeof(arr[0][0]));//数组首元素的大小printf("sz =a / b  = %d\n", sizeof(arr) / sizeof(arr[0][0]));//大小为1printf("arr = %p\n", arr);//数组首元素地址printf("arr + 1 = %p\n", arr + 1);//下一个元素的地址printf("&arr = %p\n", &arr);//指针的地址printf("&arr + 1 = %p\n", &arr + 1);//指针下一项的地址
}int main(void)
{int Shuzu[3][4] = { 0,1,2,3,4,5,6,7,8,9 };printf("a = %d\n", sizeof(Shuzu));//数组总大小printf("b = %d\n", sizeof(Shuzu[0][0]));//数组首元素大小printf("sz =a / b = %d\n", sizeof(Shuzu) / sizeof(Shuzu[0][0]));//数组元素个数printf("Shuzu = %p\n", Shuzu);//数组首元素地址printf("Shuzu + 1 = %p\n", Shuzu + 1);//下一个元素的地址,这时其内部元素的一维数组printf("&Shuzu = %p\n", &Shuzu);//代表整个数组,但是地址仍是首元素地址printf("&Shuzu + 1 = %p\n", &Shuzu + 1);//跳过整个数组后紧挨着的地址//此时该地址减去首元素地址等于数组大小printf("\n\n");Lisa(Shuzu);return 0;
}

 

 

形参格式,例如:int arr[][4]或者int (*arr)[4],这里为指向具有四个整型元素的一维数组的数组指针。除了第一个中括号里的数字可以省,后面的中括号的内容不能省略,因为下标是数组类型的一部分,省略掉就不明确其类型。
注意:
看待所有的数组时,都将它看作一维数组,只不过其内部元素不一样,例如:三维数组其内部元素为二维数组,而二维数组也是有一维数组组成,都是线性连续且相等的。

4.数组指针和指针数组

  • 数组指针:是指针,指向数组。例:int (*arr)[10]
  • 指针数组:是数组,数组内容存放的是指针。例:int *arr[10]

然后,需要明确一个优先级顺序:()>[]>*
所以:
(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;
*p[n]:根据优先级,先看[],则p是一个数组,再结合*,这个数组的元素是指针类型,共n个元素,这是“指针的数组”,即指针数组。

4.1指针数组

#include<stdio.h>int main(void)
{int *p[4];int arr1[3] = { 1,2,3 };int arr2[4] = { 2,4,6,8 };int arr3[5] = { 0 };int arr4[2] = { 2,2 };p[0] = arr1;p[1] = arr2;p[2] = arr3;p[3] = arr4;printf("%d\n", *(p[0] + 1));printf("%d\n", *(p[1] + 1));printf("%d\n", *(p[2] + 1));printf("%d\n", *(p[3] + 1));return 0;
}

首先,对于语句int*p[4],因为[ ]的优先级要比*要高,所以 p 先与[ ]结合,构成一个数组的定义,数组名为 p,而int*修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 4 个指向int类型数据的指针,如图所示,因此,它是一个指针数组。

4.2数组指针

#include<stdio.h>int main(void)
{int Shuzu[3][4] = { 0,1,2,3,4,5,6,7,8,9,0,0 };int(*arr)[4] = Shuzu;for (int i = 0;i < 3;i++){for (int j = 0;j < 4;j++){printf("arr[%d][%d]=%d  ", i,j,arr[i][j] );}printf("\n");}return 0;
}

 

其次,对于语句int(*arr)[4],“( )”的优先级比[ ]高,*号和 arr 构成一个指针的定义,指针变量名为 arr,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,arr 是一个指针,它指向一个包含 4 个int类型数据的数组,如图 所示。很显然,它是一个数组指针。

 

 

http://www.yayakq.cn/news/40923/

相关文章:

  • 官网站超链接怎么做免费入驻的电商平台
  • dedecms企业网站健展公司
  • 南京企业建网站流程拜年图片制作
  • 象山经济开发区建设有限公司网站什么官网比较容易做网站
  • 珠海正规网站制作哪家好ui设计公司哪家好
  • 厦门 外贸商城网站建设做百度推广网站得多少钱
  • 邯郸市住房和城乡建设网站雄安网站制作多少钱
  • 有口碑的郑州网站建设知名广州网站建设
  • 企业网站html付费网站怎么做
  • 织梦系统网站地图模板下载合肥网站制作培训
  • 怎么做网站广告位外链代发软件
  • 丹江口市建设局网站网站内页降权 关键词排名下降
  • 投资网站建设公司多少钱全球vi设计公司
  • 南京城乡住房建设厅网站珠海市斗门建设局网站
  • 网站开发工程师 课程大纲企业网站设计制作收费
  • 国内做企业英文网站用什么cms无锡市滨湖区建设局网站
  • 怎样免费建一个网站中国建设银行网站的社保板块在哪
  • 做教育的网站制作网页的代码实例
  • 网站开发一个多少钱啊推推蛙seo
  • 在线名片制作网站开发wordpress 不兼容ie
  • 省机关事务局网站建设管理情况六安网站建设企业
  • 做网站应该先从什么地方开始中国 庆阳
  • 网站用哪些系统做的好seo扣费系统
  • php个人网站怎样做做外卖的网站
  • 江门建设网站wordpress上传主题超时
  • 做有支付系统的网站一般需要多少钱局域网建设简单的影视网站
  • 淘宝网站小视频怎么做如何制作网站教程
  • 网站建设推广哪家专业上海全部解封通知最新
  • 深圳市建设厅官方网站免费建设dj网站
  • 网站对联代码建设网站专业公司吗