个人见解(2)指针和一维数组
2016-12-10 12:31
197 查看
1.利用指针指向数组
指针变量中可以存放另一个变量的地址,而数组在之前的学习中说道数组是内存中一段连续的地址(即按序存放);也就是说我们只要知道数组的首地址,存入指针中,根据指针的运算特性,我们可以知道数组各个元素的地址,并且引用它们;
代码:
定义一个数组和指针p;p=&arr[2],代表p指向了arr[2]的地址,又因为数组名即数组在内存开辟一段连续的地址的首地址,p=arr,代表p指向数组的首地址,当然也可以写成p=&arr[0];又利用*运算符,得出*p==arr[0];
2.利用指针调用数组元素;
了解指针的一个特性:如果指针p指向数组其中的某个元素,那么p+1便指向下一个元素;
通过这个特性,我们就能用指针调用数组中的任意一个元素了;
下面是在我几本书中收集的指针和数组的对应关系:
首先定义:
1.数组的第i个元素的地址可以表示成:&a[i] , p+i , a+i
2.数组中第i个元素的值(运算):a[i] , (p+i) , *(a+i)
3.指向数组的指针变量也可以带下标:p[i]==*(p+i)
下面我给出一些等价代码来使用指针来输出数组和接受赋值:
指针变量中可以存放另一个变量的地址,而数组在之前的学习中说道数组是内存中一段连续的地址(即按序存放);也就是说我们只要知道数组的首地址,存入指针中,根据指针的运算特性,我们可以知道数组各个元素的地址,并且引用它们;
代码:
int arr[10]; int *p; p=&arr[2]; p=arr;
定义一个数组和指针p;p=&arr[2],代表p指向了arr[2]的地址,又因为数组名即数组在内存开辟一段连续的地址的首地址,p=arr,代表p指向数组的首地址,当然也可以写成p=&arr[0];又利用*运算符,得出*p==arr[0];
2.利用指针调用数组元素;
了解指针的一个特性:如果指针p指向数组其中的某个元素,那么p+1便指向下一个元素;
通过这个特性,我们就能用指针调用数组中的任意一个元素了;
下面是在我几本书中收集的指针和数组的对应关系:
首先定义:
int a[10],*p; p=a;
1.数组的第i个元素的地址可以表示成:&a[i] , p+i , a+i
2.数组中第i个元素的值(运算):a[i] , (p+i) , *(a+i)
3.指向数组的指针变量也可以带下标:p[i]==*(p+i)
下面我给出一些等价代码来使用指针来输出数组和接受赋值:
#include <stdio.h> int main (){ int a[10],*p=a,i; // for (i=0;i<10;i++) // scanf("%d",&a[i]); for (i=0;i<10;i++) scanf("%d",p++); //等价于上面的scanf // for(i=0;i<10;i++) // printf("%d ",a[i]); p=a; // 因为在scanf中指针自加了,这里要让指针重新指向a的首地址 for(i=0;i<10;i++) printf("%d ",*p++); //等价于上面的printf return 0; }
相关文章推荐
- 为什么char型指针可以直接赋值而其他类型的不行呢?个人见解
- 浅谈数组指针、指针数组、函数指针、函数指针数组、函数指针数组指针,个人见解。
- 为什么char型指针可以直接赋值而其他类型的不行呢?个人见解
- 指针的个人见解(1)
- 关于指针的个人见解
- 程序设计学习方法的一点个人见解
- C++ primer(第五版) 练习 3.30 个人 见解
- golang 的指针和非指针方法的见解
- dodo:人脸识别方法个人见解 (zz)
- 网上笔仗个人见解
- [区块链]分布式一致性之paxos算法个人见解
- 对于dequeueReuseableCellWithIdentifier的个人见解
- Webservice soap wsdl区别之个人见解
- 对前端初学的学习经验和个人见解
- dodo:人脸识别方法个人见解
- linux c++ select/poll/epoll 的个人见解
- finally个人见解
- C++/C字符类指针 解引用问题见解
- 设计一个指向函数的一个指针,处理一个一维数组,调用该函数三次可以输出总和,最大值,平均值
- 关于一级指针和二级指针的简单见解