新手求助指针问题
请问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:59 编辑
一级指针解引用是个值,指针本身只能接收一个地址或指向一个普通变量。就比如这里的temp,用于接收其他指针地址。
二级指针解引用是个地址,指针本身可以接收一个地址,可以指向一个指针,可以指向一个数组,可以接收二维数组地址或指针数组地址。特点就是一次解引用只拿到地址,两次解引用才拿到值。这里的用法是接收指针数组地址,其实这里仅仅只是接收地址又把地址传出去而已,作用并非很大,可有可无。因为数组的地址等于数组首元素的地址,只要你的编译器支持c99或c11,完全能用一个一级指针先拿到指针数组地址并合法交给他人,在实际使用的时候才去两层解引用。当然,如果这会使你疑惑,就不要这样做 当然有区别啦!
**p是指向字符串数组指针的指针,fruit本来就是指针,指向指针的指针就是二级指针了
*temp是指向字符串的指针,字符串相当于一个一维数组。
一级指针存放的是变量的地址,直接指向变量,
二级指针存放的是int值,该int值本身就是另一个指针的地址,另一个指针地址处存放的是变量的地址
页:
[1]