#include<iostream,h>
viod fun(int*s,int n1,int n2){ 定义的int*s是什么?指针?
int i,j,t
i=n1;j=n2;
while(i<j){
t=*(s+i);*(s+i)=*(s+j);*(s+j)=t; 这句是什么意思?
i++;j- -;
void main(){
int a[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a;
fun(P,0,3);fun(p,4,9);fun(p,0,9);
for(!=0;i<10;i++)
cout<< *(a+i);
cout<<end1;
#include<iostream,h>
viod fun(int*s,int n1,int n2){ //定义的int类型的指针s
int i,j,t
i=n1;j=n2;
while(i<j){
t=*(s+i);*(s+i)=*(s+j);*(s+j)=t; //这是三句,每个 ; 代表一行结束。
相当于:
t=*(s+i); //把s+i的地址指定给变量t
*(s+i)=*(s+j); //把s+j的地址赋给s+i的内存地址
*(s+j)=t; //把t的值赋值给指针s+j
其实这是一个内存地址的交换过程,其中的t只是一个临时变量,经过互换后,目的是把s+i 和s+j 在内存中的地址进行调换
int *s
的确定义了一个指向一片连续整型存储单元的指针,其实就是用了数组的另一种表示方法。
对于
int a[10];(静态数组定义,就是在内存中申请了一片连续的存储单元,每个单元两个字节,共10个)
定义的数组,如果直接使用数组名a,那么它是指该数组第一个元素所对的地址,也就是说a==&a[0]
那么相反的a[0]==*a (*在这里表示取出指针所对的值)
指针p=a的意思就是这点(在变量声明中*的意思是指声明的变量为指针变量,*p=a的意思就是声明了一个p指针变量,并赋初值为a)
那么怎么用指针去取得数组中其他元素的值呢?*(a+i)就表示a[i]了,其实可以想象*(a+0)==*(a)==*a=a[0]嘛
(在指针的加法中,+1代表移向下一个内存单元,而不是下一个字节,比如,整型指针+1就是移动两个字节,长整指针+1就是移动4个字节)
切记,指针变量是可以用来加减的修改运算的,而数组名只能当作只读指针,例如,在这题中如果p++那么程序可以通过,并且p==&a[1],而a++是不允许的。因为这样会使得a[0]丢失,C语言不允许这样的操作。
t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;这句话实际上就是交换a[i]和a[j]的值。
还有什么问题么?
对 就是指针来的
t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;
就是t=a[i]; a[i]=a[j]; a[j]=t; 交换两数的代码
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息