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

大学校园门户网站建设方案h5邀请函制作

大学校园门户网站建设方案,h5邀请函制作,上海人才信息网官网,记事本做网站的流程目录 1. 数组名的含义 1.1 数组名与数组首元素的地址的联系 1.3 数组名与首元素地址相异的情况 2. 使用指针访问数组 3. 一维数组传参的本质 3.1 代码示例1:函数体内计算sz(sz不作实参传递) 3.2 代码示例2:sz作为实参传递 3…

目录

1. 数组名的含义

1.1 数组名与数组首元素的地址的联系

1.3 数组名与首元素地址相异的情况

2. 使用指针访问数组

3. 一维数组传参的本质

3.1 代码示例1:函数体内计算sz(sz不作实参传递)

 3.2 代码示例2:sz作为实参传递

 3.3 结论

4. 指针数组


1. 数组名的含义

1.1 数组名与数组首元素的地址的联系

从值的角度来看,数组名 = 数组首元素的地址,即arr = &arr[0] ;

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

运行结果如下:

1.3 数组名与首元素地址相异的情况

大多数情况下,数组名=数组首元素地址,但是有两个例外:

1、sizeof(数组名):此时数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小(单位为B)

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

运行结果如下: 

2、&(数组名):此时数组名也表示整个数组,&(数组名)得到的是整个数组的地址

(虽然在值上体现为相同,但本质/指针类型是不同的)

#include<stdio.h>int main() {int arr[10] = { 0 };printf("&arr[0] = %p\n",&arr[0]);printf("arr     = %p\n", arr);printf("&arr    = %p\n", arr);printf("---------------------\n");printf("&arr[0]+1 = %p\n", &arr[0]+1);printf("arr+1     = %p\n", arr + 1);printf("&arr+1    = %p\n", &arr + 1);return 0;
}

运行结果如下:

由于指针+1的具体跨度与指针类型有关:

&arr[0]与arr均表示数组首元素地址,指针类型为int*,故指针+1则跳过4B;

&arr表示数组的地址,指针类型为数组指针,故指针+1则跳过整个数组即10×4B=40B;

2. 使用指针访问数组

代码示例1:

int main() {int arr[10] = {0};int* p = arr;int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; i++) {scanf("%d", p + i);}for (int i = 0; i < sz; i++) {printf("%d ", *(p+i));}return 0;
}

输出结果为: 

代码示例2:

int main() {int arr[10] = { 0 };int* p = arr;int* start = p;int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; i++) {scanf("%d", p);p++;}for (int i = 0; i < sz; i++) {printf("%d ", *start);start++;}return 0;
}

运行结果为: 

代码示例3:

int main() {int arr[10] = { 0 };int* p = arr;int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; i++) {scanf("%d",p+i);}for (int i = 0; i < sz; i++) {printf("%d ",arr[i]);}return 0;
}

运行结果为: 

注:关于下标引用操作符:

理解数组元素与指针解引用的对应:arr [ i ] 即 * ( arr + i ),其中 [ ] 为下标引用操作符,

编译时,arr [ i ] 会被处理为* ( arr + i ),实际上i [ arr ] 也会被处理为* ( i + arr );

3. 一维数组传参的本质

现要求编写程序,使用函数实现一维数组arr的元素打印;

3.1 代码示例1:函数体内计算sz(sz不作实参传递)

void Print(int arr[10]) {int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; i++) {printf("%d ", *(arr + i));}
}
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };Print(arr);return 0;
}

运行结果如下:

调试如下:

可见在函数Print内计算sz出现错误,从而导致函数功能未能正确实现;

分析代码如下:(见注释)

void Print(int arr[10]) {  // 形参arr[10]:数组传参时,可以写为数组形式;但其本质是指针变量,而非完整的数组int sz = sizeof(arr) / sizeof(arr[0]);  // sz求得指针变量大小=1for (int i = 0; i < sz; i++) {printf("%d ", *(arr + i));}
}
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };Print(arr);  // 实参arr:数组首元素地址return 0;
}

 3.2 代码示例2:sz作为实参传递

void Print(int* arr, int sz) {for (int i = 0; i < sz; i++) {printf("%d ", *(arr + i));}
}
int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz = sizeof(arr) / sizeof(arr[0]);Print(arr, sz);return 0;
}

 3.3 结论

1、数组传参的本质是传递了数组首元素的地址

2、数组传参时,形参可以写为数组形式,但本质仍是指针变量,而不是完整的数组,故而建议将形参写为指针形式而非数组形式:

void Print(int* arr, int sz) {for (int i = 0; i < sz; i++) {printf("%d ", *(arr + i));}
}

3、数组传参时,形参的数组不会单独再创建数组空间,故形参的数组可省略数组大小,即形参可写为以下形式:

void Print(int arr[], int sz) {  for (int i = 0; i < sz; i++) {printf("%d ", *(arr + i));}
}

4、数组传参时,数组大小sz必须在函数体外计算并作为参数传递给函数

4. 指针数组

 类比整型数组,即存放整型变量的数组;字符数组,即存放字符变量的数组;

指针数组即存放指针变量的数组;

现利用指针数组模拟二维数组:

int main() {int arr1[] = { 1,2,3,4,5 };int arr2[] = { 2,3,4,5,6 };int arr3[] = { 3,4,5,6,7 };int* arr[3] = { arr1,arr2,arr3 };for (int i = 0; i < 3; i++) {for (int j = 0; j < 5; j++) {/*printf("%d ",*(arr[i]+j));*/printf("%d ", arr[i][j]);}printf("\n");}return 0;
}

注:(1)对于模拟实现的二维数组的元素访问,arr [ i ] [ j ]等价于 * ( arr [ i ] + j),编译时编译器会将数组元素的访问解析为指针运算;

(2)真正的二维数组是在内存中逐行连续存放的,本例中模拟实现的二维数组仅实现了每一个子一维数组的连续存放,并不是真正的二维数组;

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

相关文章:

  • 网站建设com服装网站建设公司地址
  • 揭阳网站建设工作怎样开电商线上店
  • 网站空间到期怎么续费商城网站建设平台
  • 南宁公司的网站建设如何将wordpress产品分类转为菜单
  • 山西建设网站企业大冶市建设部门网站
  • asp.net 建立网站吗网站建设和网络推广外包
  • 响应式网站项目重庆seo
  • 汽车网站建设页面wordpress mysql储存
  • 国外建站企业wordpress指定ip登陆
  • 红河州建设局门户网站人员调动在网站上怎么做
  • 网站如何换域名网页设计中返回首页怎么设计
  • 免费做网站的优缺点个人网站空间多大合适
  • 新乡网站seo优化旅游电子商务网站建设规划书
  • 网站首页推广做国外网站的站长
  • 招投标网站建设开发做纺织都有那些好网站
  • 广州建造网站公司百度快照推广一年要多少钱
  • 杭州网站建设哪里好山东省建设发展研究院网站
  • 学校网站设计平湖模板网站建设公司
  • 网站建设只有一个空间吗vps 网站发布
  • 大连 网站wordpress做学校网站
  • 沈阳高端网站定制头条新闻 最新消息条
  • 怎么搞一个服务器建设网站免费创建网站平台有哪些
  • 360建站平台贵州住房与城乡建设厅网站
  • wordpress更换网站域名外发加工网1688
  • 网站建设响应式是什么网站建设 陕icp
  • 哪里有网站建设加工智慧团建网
  • 如何用ps做照片模板下载网站为什么公司网站打开很慢
  • 企业网站导航优化自学网站建设与网页设计
  • 淘宝网站首页是用什么软件做的南宁广告设计与制作公司
  • 网站互联网推广爱站网长尾