【c语言】指针实现数组元素的移位

方案一、显示上移位,实际不发生移位。。

#include<stdio.h>
#include<math.h>
void main(){
    int a[10],i,*p,n;
    n=4;
    srand(time());
    printf("数组:");
    for(i=0;i<10;i++){
        a[i]=rand()%100;
        printf("%-4d",a[i]);
    }
    printf("\n");
    p=&a[n];
    printf("现在的素组");
    for(i=n;i<10;i++){
       printf("%-4d",*p++);

}
    for(i=0;i<n;i++){
        printf("%-4d",a[i]);
    }
    printf("\n");
}

方案二、显示和实际都发生移位。

#include<stdio.h>
void move(int *pa,int n,int m){
    int *p,*q;
    int i,temp;
    for(p=pa+n-m;p<pa+n;p++){
        temp=*p;
        for(q=p-1;q>=p-(n-m);q--)
            *(q+1)=*q;
        *(q+1)=temp;
    
    }
}
main(){
    int number[10],m,i;
    printf("back m:");
    scanf("%d",&m);
    printf("input array 10 elements.\n");
    for(i=0;i<10;i++)
        scanf("%d",&number[i]);
    move(number,10,m);
    for(i=0;i<10;i++)
        printf("%d ",number[i]);
    printf("\n");
}

时间: 2024-11-04 20:03:20

【c语言】指针实现数组元素的移位的相关文章

c/c++(疑3) C语言指针与数组之间关系

c/c++ (疑1)数组和指针 c/c++(疑2) const extern 有了前面 两篇 基础,下面我们可以更深入的来介绍c/c++(疑3) C语言指针与数组之间关系 1 概述(C语言指针与数组之间关系) 指针就是指针,指针变量在32 位系统下,永远占4 个byte,其值为某一个内存的地址.指针可以指向任何地方,但是不是任何地方你都能通过这个指针变量访问到. 数组就是数组,其大小与元素的类型和个数有关.定义数组时必须指定其元素的类型和个数.数组可以存任何类型的数据,但不能存函数. 2    

C语言指针和数组

C语言指针和数组 binsearch else-if  shellsort  insertsort 指针和地址 指针是编程语言中的一类数据类型及其对象或变量,用来表示或存储一个内存地址,这个地址的值直接指向(points to)存在该地址的对象的值. 取值运算*p返回保存在内存地址为p的内存空间中的值.取地址&p运算则返回操作数p的内存地址 C语言是以传值的方式将参数值传递给被调用函数,被调用函数不能直接修改主调函数中的值,需要修改主调函数中的值就需要利用指针 指针和数组 数组名代表的是该数组的

程序设计基石与实践之C语言指针和数组基础

英文出处:Dennis Kubes:  <Basics of Pointers and Arrays in C>. 关于C语言中指针和数组的争论就像是一场恶战.一方面,有些人觉得,所有人都必须承认指针与数组是不同的.而另一些人则认为数组被当成指针来处理,因此它们不应该有什么区别.这种现象让人迷惑.然而,这两种说法其实都是正确的. 数组不是指针,指针也不能说是数组.在C语言中,指针仅在内存中代表一个地址,而数组是许多连续的内存块,多个类型相似的元素存储在其中.更深入的解释,请参考我之前的博文&l

C语言指针与数组易混淆知识点(一)

一指针与数组 二指针与函数 三指针数组数组指针指向指针的指针 四程序陷阱 一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容)是跟操作系统的地址位数有关,比如32位地址的系统,那么指针所占的内存单元就是4个字节,16位就是2个字节,因此,指针的类型只是限定它所指向的变量的类型,其内容所占的单元大小是与操作系统的地址位数相关,与变量类型无关. 在32

C语言指针与数组的定义与声明易错分析

部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告诉编译器a这个名字已经在别的文件中被定义了,下面的代码使用的a是在别的文件中定义的.编译器是按文件分别编译的,当a被声明为char* a时,编译器理所当然的认为a是一个指针变量,在32位系统下占用4个byte,这4个byte存放的是地址,地址指向的空间存储的是char类型数据. 程序会返回SIGSEGV. 2

用指针引用数组元素并打印输出

<span style="font-size:18px;">#include<stdio.h> void main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4];//数组指针变量声明 int row,col; p=a;//指针p指向数组元素为4的数组 //打印输出数组指针p指向的数组的值 for(row=0;row<3;row++) { for(col=0;col<4;

C语言指针、数组和函数的一些总结

主要来自于孟宪福老师的分布式对象课程. int a[7][8]; // a指向 a-->a[0]-->a[0][0] a[0]是第0行一维数组 // a + i --> a[i] --> a[i][0] a[i][j]; // 等价于*( *(p + i ) + j) 定义一个函数返回7*8的数组a int ( *f () ) [8] { int a[7][8]; return a; } 总结起来就是: 1. 从标识符开始 a. 定义数组,数组的元素是什么? b. 定义函数,函数的

C 语言中的左值和右值。以及对比数组名和指针取数组元素的区别。

左值:出现在赋值符左边的符号有时称为左值. 右值:出现在赋值符右边的符号有时称为右值. 编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址.相反,存储于变量中的值(它的右值)只有在运行时才可知.如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器. 可以看到,每个符号的地址在编译时可知. 对比一下几个式子: //常规变量 int a=1;//这里a作为左值出现,代表的是地址,即在a表示的这个内存地址存入数值1.即a代表的内

C语言通过指针对数组元素进行排序

// //  main.c //  Pointer_array // //  Created by ma c on 15/8/2. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:使用指针的指针输出字符串.首先要使用指针数组创建一个字符串数组,然后定义指向指针的指针,使其指向字符串数组,并使用其输出数组中的字符串.同时对数组中的内容进行升序排序. #include <stdio.h> #include<string.h