指针数组与数组指针详解

指针数组与数组指针详解1、数组指针和指针数组的概念理解#include <stdio.h>int main(){ int arr[] = {0,1,2,3,4,5}; int* p = arr; for (int i

1、数组指针和指针数组的概念理解   #include <stdio.h> int main() { int arr[] = {0,1,2,3,4,5}; int* p = arr; for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++){ printf(“arr[%d] = %d ========= %d   ”, i, arr[i], *(p + i)); } return 0; }   代码运行结果为:   
指针数组与数组指针详解        这里需要注意一个知识点:既然可以通过指针访问数组,给出以下两段代码都可以访问数组中的素:   #include <stdio.h> #define NUM 5 int main() { //代码 1 int arr[NUM] = {0,1,2,3,4}; printf(“code 1:   ”); for (int* p = &arr[NUM]; p > arr;) { printf(“%d “,*–p); } printf(”   ”); //代码 2 printf(“code 2:   ”); for (int *p = &arr[NUM – 1]; p >= arr; p–) { printf(“%d “,*p); } return 0; }   代码运行结果为:   
指针数组与数组指针详解    可以发现两段代码都对数组中的素进行了访问,但C语言标准规定了允许指向数组素的指针可以和最后一个素后面的内存位置进行指针比较,不允许与第一个素之前的内存位置进行比较,所以,使用指针比较的时候应该注意符合语言规范,避免后期出现不可知问题,所以,上述代码二属于不规范代码。   知识点:既然arr是数组首素的地址,那么&arr的地址是谁的地址?   下面通过代码验证:   #include <stdio.h> #define NUM 2 int main() { int arr[NUM] = {1,2}; printf(“arr = %p   ”, arr); printf(“&arr = %p   ”, &arr); printf(“arr + 1 = %p   ”, arr + 1); printf(“&arr + 1 = %p   ”, &arr + 1); return 0; }   代码运行结果为:   
指针数组与数组指针详解        可以发现,arr和&arr的地址是相同的,但是arr+1的地址为0X0061FF1C, &arr + 1的地址为:0X0061FF20,比arr + 1的地址多出了4字节,这是因为&arr是整个数组的地址,数组的大小为8字节,所以,每次+1相当于加了8字节的地址,而arr是数组素的地址,数组素是int型,所以,每次+1地址加了4字节。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/83748.html

(0)
上一篇 2024年 7月 28日
下一篇 2024年 7月 28日

相关推荐

关注微信