C语言编程:用指向指针的指针的方法对n个整数排序并输出。

作者&投稿:狄梁 (若有异议请与网页底部的电邮联系)
C语言指针问题:用指向指针的指针方法对n个整数排序并输出。要求将排序单独写成一个函数。~

首先,要说明的是:数组名,是一个指针,它指向存放数组元素的一块内存区域,那么数组元素是怎么被引用的呢,我举个例子。如a[3],编译系统会首先找到这个数组的首地址,即a,然后根据〔〕中的值确定地址偏移量,即3,由此便确定了,要引用的元素是地址a+3所指向的单元的内容。你知道〔〕叫什么吗?它不只是“方括号”,在C中它的名字叫“偏址运算符”,由此可知它的作用是什么。在C++中,〔〕是可以被重载的。

明白了上面那一点后,再来看,那么指针变量p和数组名a便具有了相同的性质,即:都是一个指针。

(1)p+1,a+2,p++,p=p+1,p-a当然都是合法的了。因为它们是相同类型的量之间进行的运算。只不过,这个量不同于一般存放数据的量,它存放的是地址罢了。

(2)a++,a=a+1,a=a-1之所以非法,是因为一旦为数组分配了内存空间后,其首地址是确定的了,就相当于一个常量,常量怎么可以改变呢?

这里,你可能会有点疑惑。但我只想说一句:“对变量(或常量)的引用不等于改变这个变量(或常量)”,你好好的揣摩一下。如p-a,a-2等只是引用a的值进行计算,但a本身的值并没有改变,而a++,即a=a+1却是硬生生地尝试去改变a,你看,是这样的吗?或许换个写法你看着更直观一些,如:k=p-a与a=a-1

(3)关于它们的意思,其实我前面已经说了。既然p,a是指针,存放的是地址,那么对它们的操作当然是改变地址的运算了,如p+1就指向地址为P+1的这个内存单元,。。。。。
对于a++,a=a-1这些非法的家伙嘛,就不用多说了,它试图去改变有用的数据单元,是绝对不能容忍的,我们需要的是稳定。。。。


===================
有括号的情况下func是一个函数指针,而没括号它返回一个int指针函数。
函数指针是指向函数的指针变量。
每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。函数指针”是指向函数的指针变量,因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。


指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。

不太知道你的具体要求,写了个比较简单的先看着吧:
#include
using namespace std;

void MintoMax(int**intdata1,int**intdata2);
void main(void)
{
int data1temp,data2temp;
int *data1,*data2;
cin>>data1temp>>data2temp;
data1=&data1temp;data2=&data2temp;
MintoMax(&data1,&data2);
cout<<"Min: "<<*data1<<"Max: "<<*data2<<endl;
}
void MintoMax(int**intdata1,int**intdata2)
{
int* tempdata=NULL;
if (**intdata1>**intdata2)
{
tempdata=*intdata1;
*intdata1=*intdata2;
*intdata2=tempdata;
}
}

用指向指针的指针的方法对n个整数排序并输出的具体编程步骤如下:

1、编写头函数:#include <stdio.h>。

2、编写条件函数:

void sort(int **p,int n)

{

int i,j,temp;

for(i=0;i<n-1;i++)

for(j=0;j<n-1-i;j++)

{

if(*p[j]>*p[j+1])//或者是*(*(p+j))>*(*(p+j+1))

{

temp=*p[j];

*p[j]=*p[j+1];

*p[j+1]=temp;

}

}

}

3、最后编写主函数:

int main()

{

void sort(int **,int );

int i,n,data[20],**p,*pstr[20];

scanf("%d",&n);

for(i=0;i<n;i++)

pstr[i]=&data[i];

for(i=0;i<n;i++)

scanf("%d",pstr[i]);

p=pstr;

sort(p,n);

for(i=0;i<n;i++)

printf("%d ",*pstr[i]);

return 0;

}



#include <stdio.h>  
#include <stdlib.h>  
#define MAXSIZE 100  
void swap(int*, int*);  
void sort(int**, int);  
int main(void)  
{  
    int i;  
    int n;  
    //整形数组  
    int array[MAXSIZE];  
    //指针数组  
    int *pArray[MAXSIZE];  
    printf("please enter n:
");  
    scanf("%d", &n);  
    for (i = 0; i < n; ++i)  
    {  
        scanf("%d", &array[i]);  
        pArray[i] = &array[i];  
    }  
    sort(pArray, n);  
    for (i = 0; i < n; ++i)  
    {  
        printf("%d
", *pArray[i]);  
    }  
    return 0;  
}  
//交换  
void swap(int *a, int *b)  
{  
    int temp = *a;  
    *a = *b;  
    *b = temp;  
}  
//排序  
void sort(int **array, int n)  
{  
    int *p;  
    int *q;  
    for (p = *array; p < *array + n; ++p)  
    {  
        for (q = p + 1; q < *array + n; ++q)  
        {  
            if (*p > *q)  
            {  
                swap(p, q);  
            }  
        }  
    }  
}



C语言编程:用指向指针的指针的方法对n个整数排序并输出。
用指向指针的指针的方法对n个整数排序并输出的具体编程步骤如下:1、编写头函数:#include <stdio.h>。2、编写条件函数:void sort(int **p,int n){ int i,j,temp;for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++){ if(*p[j]>*p[j+1])\/\/或者是*(*(p+j))>*(*(p+j+1)){...

c语言题目:用指向指针的方法对n个字符串排序并输出
include<stdio.h> include<string.h> int main(){ int n,i,j;char s[100][20],*p[100],*t;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",s[i]);p[i]=s[i];} for(i=0;i<n-1;i++)for(j=0;j<n-1-i;j++)if(strcmp(p[j],p[j+1])>0){t=p[j];p[j]...

编程C语言用指向函数的指针求两个数中的较大者?
函数指针的声明方式和数组指针类似,多了返回值和参数类型。比如:int (*p) (int,int);。函数名其实就是函数指针,所以还可以作为函数参数传递。我的代码演示:include <stdio.h> typedef int (*fp)(int,int);int compare(int,int);int fun(int n1,int n2,fp funp);int main(){ int n1,n...

c语言中指向指针的指针怎么理解?
理解指向指针的指针,首先需要理解基础的指针概念。在C语言中,指针是内存地址的引用。例如,一个变量的地址被存储在指针中,通过这个指针,可以直接访问该变量的值。在此基础上,指向指针的指针进一步扩展了这个概念。当一个指针指向另一个指针时,就形成了指向指针的指针。形象的比喻,想象一个人住在401...

C语言编程:定义指向函数的指针pm,指向头文件math.h的函数,求解双精度变 ...
按照题目要求编写的C语言程序如下(见图)

C语言编程指向结构体数组的指针
array + j + 1); flag = 0; } } if (flag) break; }}void print(student *array, int n){ int i; printf("姓名\\t语文\\t数学\\t英语\\t平均成绩\\n"); for (i = 0; i < n; i++) { printf("%s\\t%d\\t%d\\t%d\\t%f\\n"...

C语言编程实现:利用指针,输入3个整数,按由小到大的顺序输出。_百度知 ...
写法一、(交换指针指向的地址中存放的数据):include<iostream> usingnamespacestd;intmain(){ inta,b,c;int*p1,*p2,*p3;inttemp;cout<<"输入3个整数:"<<endl;cin>>a>>b>>c;p1=&a;p2=&b;p3=&c;if(*p1>*p2){ temp=*p1;p1=*p2;p2=temp;} if(*p1>*p3){ temp=*p1;p1=...

C语言中指向指针的指针是什么意思
指针其实也是个变量(只要是变量就一定有相应的内存空间) 只是这个变量比较的特殊 它只能存放别的变量的地址 变量时在内存中是有地址的 你要明确两概念:变量值和变量地址 变量值:是变量本身的内容 变量地址:是该变量在内存中的位置编号 通俗来讲就是说这个变量fp只能接受一个指针变量的地址所以你看...

C语言编程:从键盘任意输入三个数,编写求其最大值、最小值的函数,用指针...
} void Fun(int a[]){ int i;int temp;int MaxNum=a[0];int maxIndex = 0;int minIndex = 0;int MinNum=a[0];for(i=0;i<10;i++){ if(a[i]>MaxNum){ MaxNum=a[i];maxIndex = i;} else if(a[i]<MinNum){MinNum=a[i];minIndex = i;} }temp = a[maxIndex];a...

C语言编程:从键盘任意输入三个数,编写求其最大值、最小值的函数,用指针...
} void Fun(int a[]){ int i;int temp;int MaxNum=a[0];int maxIndex = 0;int minIndex = 0;int MinNum=a[0];for(i=0;i<10;i++){ if(a[i]>MaxNum){ MaxNum=a[i];maxIndex = i;} else if(a[i]<MinNum){MinNum=a[i];minIndex = i;} }temp = a[maxIndex];a...

松岭区18088527869: c语言中如何引用一个指向指针变量的指针?请高手说的明白些好吗,不是数组和指向指针变量的指针, -
苍炊甘氨: int a;//声明整型变量a int *p=&a;//声明指向整型变量的指针p,并初始化为指向变量a int **q=p;//声明指向指向整型变量指针的指针q,并初始化为指向指向整型变量的指针p 要引用的话*p=**q=a,其中,*q=p.C对指针的级层没有限制,但实用中一般不超过3级;一级指针用得最为普遍,二级以上指针常用来处理多维数组.

松岭区18088527869: c语言指针编程题:用指向指针的指针的方法对5个字符串排序后输出. -
苍炊甘氨: char *a[5];/*改成char *a[6];for(i=0;i

松岭区18088527869: C语言指针的用法 -
苍炊甘氨: #include<stdio.h> #include<math.h> #include <conio.h> void sort(char *a[],int n) { int i,j; char *temp; for(i=0;i<n;i++) for(j=i+1;j<n;j++) if(strcmp(a[i],a[j]<0)) { temp=a[i]; a[i]=a[j]; a[j]=temp; } }int main() { char *a[3]; int i; for(i=0;i<3;i++) a[i] = (char *)malloc(...

松岭区18088527869: c语言指向指针的指针变量怎么用++ -
苍炊甘氨: 1. C语言中有两种非常有用的运算符++和--,分别称为递增和递减运算符,对变量执行加1或减1操作,且运算结果仍赋给该变量.递增、递减运算符和负号一样都是单目运算符,统称单项算术运算符.2. 指针变量本身储存的是物理地址.使用*运算符可以取得该物理地址对应的值.连续使用两个*,就可以操作指向指针的指针变量.例如:printf("%d",(*(*p1))++); printf("%d",++(*(*p2)));

松岭区18088527869: c语言:用指向指针的方法对五个字符串排序并输出 -
苍炊甘氨: #include <stdio.h>#include <string.h> void sort(char * str[],int size) { int i,j; char * tmp; for(i=0;i<size-1;i++) { for(j=i+1;j<size;j++) { if(strcmp(str[i],str[j])>0) { tmp=str[i]; str[i]=str[j]; str[j]=tmp; } } } } void main() { char str[5][20]; char * p[5]; int i; for(i=0;i<5;i++) {...

松岭区18088527869: “用指向指针的方法对N个字符串排序并输出”的C语言程序怎么写? -
苍炊甘氨: 首先,定义一个指针数组,每个指针指向对应的字符串,然后,利用strlen函数判断字符串长度大小,然后排序,可以利用冒泡排序法.再利用for循环,输出字符串!

松岭区18088527869: c语言中指针怎么使用? -
苍炊甘氨: 1、指针指向变量:下面有这样一个代码块:int main() {int a=10;int b=15;test(a,b);printf("a=%d,b=%d\n",a,b);} void test(int x,int y) {int tmp;tmp=x;x=y;y=tmp;} 最后输出的结果还是a=10,b=15.因为在函数调用时,实参和形参之间只是值传递....

松岭区18088527869: C语言作业!~~ 用指向指针的指针的方法对10个字符串排序并输出~ -
苍炊甘氨: 既然是对字符串排序,那么一般就是根据字符串的长度来排序,对吧.C里面的字符串最后都是以数0(也就是 '\0' 这个符号)来表示结尾的.计算字符串的长度的函数在头文件已经提供了,也就是这个strlen(const char *).然后呢,就是表示字符...

松岭区18088527869: C语言:用指向指针的指针的方法对n个整数排序并输出 -
苍炊甘氨: 不太知道你的具体要求,写了个比较简单的先看着吧:#include <iostream> using namespace std; void MintoMax(int**intdata1,int**intdata2); void main(void) { int data1temp,data2temp; int *data1,*data2; cin>>data1temp>>data2temp; data1=&...

松岭区18088527869: C语言 指向指针的指针 -
苍炊甘氨: 首先要批评你提问题的方式,这样给代码很不礼貌,即使不用缩进格式也要按行来写代码吧?/*19.用指向指针的方法对5个字符串排序输出.*/ void aaaa(char **p){char *t;char a[20];int i,j;t=a; for(i=0;i<4;i++) {for(j=0;j<4-i;j++) {if(strcmp(*(p+j),*(p...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网