C语言中的指针与数组的关联1
来源:互联网 发布:爱奇艺去广告优化版 编辑:程序博客网 时间:2024/05/19 04:26
在C语言中,指针是一种类型,存放的是地址,例如char*p,这里p存放的是字符型数据的地址,int*p,p存放的是整形数据的地址,我们可以通过解运用*来获取该地址所指向的内容。而数组则是一种数据类型的集合,如int arr[]={1,2,3,4,5,6,7,8,9,10};这里声明与定义了一个整形数组,而char arr[]="hello world";则是声明与定义了一个字符类型的数组,这个数组内存放的是一个字符串。
C语言规定,在大多数情况下数组名其实质就是数组元素的首地址,所以我们可以通过运用指针的方式来访问数组,或者用数组下标的方式来访问指针所指向的内容,注意,这里时所指向的内容,并不是指针本身。举个例子:
int main(){int i = 0;int arr[10] = { 0 };//数组的初始化int*p = arr;//创建一个指向arr的指针for (i = 0; i < 10; i++)//利用指针的原理对数组进行赋值{*(arr + i) = i;}for (i = 0; i < 10; i++)//利用数组下标的方式对指针所指向空间进行赋值{p[i] = i;}for (i = 0; i < 10; i++)//对结果进行验证{printf("arr[%d]=%d *(p+%d)=%d\n", i, arr[i], i, *(p + i));}system("pause");return 0;}
这份代码要注意两点,第一是多个指针可以指向同一块目标,第二是当数组利用指针原理进行访问时,其本身发生了降级(C和指针这本书中有讲过,解释什么是降级并不是很明确),这里我们首先要明确,指针是指针,并不是数组,创建数组,内存开辟了多个字节(取决于创建大小与所创建的数据类型),而所有指针都只有4个字节,占用一块内存空间。而所谓数组降级,就是数组名从占用多个地址,变为数组首元素的地址。只有两种运算时数组不会降级,一个事对数组进行取地址时,如&arr,还有就是调用sizeof函数时数组不会降级。再给个例子:
int main(){int i = 0;int arr[10] = { 0 };//数组的初始化int*p = arr;//创建一个指向arr的指针printf("%d ",sizeof(arr));printf("%d ", sizeof(p));printf("%d ", sizeof(arr[0]));printf("%d ", sizeof(&arr));printf("%d ", sizeof(&arr[0]));printf("%d ", sizeof(*&arr));system("pause");return 0;}
这份代码的输出结果是什么呢,我们一个一个进行分析,首先int 类型占四个字节
第一个输出,上文提到过sizeof函数不会使数组降级,所以求的是整个数组的字节,是40
第二个输出,指针占四个字节,其输出结果为4
第三个输出,是求arr[0]的大小,为四个字节,也可以说是对arr进行了下标运算,使arr发生了降级还是4
第四个输出,取arr的地址,地址,肯定为四个字节
第五个,也是地址,四个字节
最后一个呢,取arr的地址,然后进行解运用,所得还是arr整个数组,在求其所占字节,为40
未完待续
本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1714861
- C语言中的指针与数组的关联1
- C语言中的指针数组与数组指针的理解
- C语言中的数组与指针的关系
- C语言中的指针与数组
- c语言中的数组与指针
- C语言中的指针与数组
- C语言中的多维数组与指针
- C语言中的数组与指针
- C语言中的数组与指针
- C语言中的指针与多维数组
- C语言中的数组名与指针
- C语言中的二维数组与指针
- c语言中的指针与数组
- C语言中的指针与数组
- C语言中的数组指针与指针数组
- C语言中指针与函数的关联2(数组的降级)
- c语言中的指针(包括数组与指针相关)
- C 语言中的元素指针与一维数组指针
- c语言不定参数与printf函数的实现
- C语言实现数组的奇偶排序
- 一个数组中所有的数都是成对出现的只有一个或者两个数字是单独的,求这个数
- C语言中模拟实现strcpy,strstr,strcat函数
- C语言模拟实现memcpy,memmove函数
- C语言中的指针与数组的关联1
- C语言中指针与函数的关联2(数组的降级)
- 指针与数组的关联3 --声明
- 模拟实现C语言strncpy.strncat.strncmp函数
- C语言模拟实现memset.memcmp函数
- C语言用结构体写一个通讯录
- 提交Android代码的格式
- C语言实现C到C++的注释转换
- C语言实现顺序表的增删查改以及排序