鱼蛋粗面冇粗面 发表于 2020-4-22 16:12:34

新手求助指针问题

请问void sort里的*temp与主函数中**p的作用有区别吗,什么时候才需要使用二级指针。
#include<stdio.h>
#include<string.h>
void sort(char*strings[],int n);
void sort(char*strings[],int n)
{
        char*temp;
        int i,j;
        for(i=0;i<n;i++)
                {
                for(j=i+1;j<n;j++)
                        {
                        if(strcmp(strings,strings)>0)
                                {
                                temp=strings;
                                strings=strings;
                                strings=temp;
                                }       
                        }
                }
}
void main()
{
        int n=8;// 数量为8个
        int i;
        char**p;
        char*fruit[]={
                                        "apple:3.50",
                                        "tangerine:2.50",
                                        "grapefriu:3.00",
                                        "banana:2.00",
                                        "orange:2.99",
                                        "pineapple:4.99",
                                        "grape:5.00",
                                        "pitaia:6.80"
                                        };
        p=fruit;                       
        sort(p,n);                       
        printf("排序后的水果及价格如下:\n");
        for(i=0;i<n;i++)
                printf("%s\n",fruit);

}

倒戈卸甲 发表于 2020-4-22 16:46:58

本帖最后由 倒戈卸甲 于 2020-4-22 16:59 编辑

一级指针解引用是个值,指针本身只能接收一个地址或指向一个普通变量。就比如这里的temp,用于接收其他指针地址。
二级指针解引用是个地址,指针本身可以接收一个地址,可以指向一个指针,可以指向一个数组,可以接收二维数组地址或指针数组地址。特点就是一次解引用只拿到地址,两次解引用才拿到值。这里的用法是接收指针数组地址,其实这里仅仅只是接收地址又把地址传出去而已,作用并非很大,可有可无。因为数组的地址等于数组首元素的地址,只要你的编译器支持c99或c11,完全能用一个一级指针先拿到指针数组地址并合法交给他人,在实际使用的时候才去两层解引用。当然,如果这会使你疑惑,就不要这样做

sunrise085 发表于 2020-4-22 16:51:47

当然有区别啦!
**p是指向字符串数组指针的指针,fruit本来就是指针,指向指针的指针就是二级指针了
*temp是指向字符串的指针,字符串相当于一个一维数组。

一级指针存放的是变量的地址,直接指向变量,
二级指针存放的是int值,该int值本身就是另一个指针的地址,另一个指针地址处存放的是变量的地址
页: [1]
查看完整版本: 新手求助指针问题