永发信息网

指针数组的地址是什么排序的

答案:5  悬赏:60  手机版
解决时间 2021-04-04 12:56
int main()
{
char *p[]={"dasa","dasdd","dxzczxc","cfdasg"};
for(int i=0;i<4;i++)
printf("address:%d\n",*(p+i));
}
为什么不是连续的呀 ,是我的表达式有错吗?指向 指针数组中 的 元素(指针)纠结了呀。
最佳答案
常量区分配的确实也不知道怎么分配的
但是如果是
char p[][10]={"dasa","dasdd","dxzczxc","cfdasg"};
这样定义的话那么就是连续的
全部回答
常量字符串,通常存放在text段,或者代码段,具体是否连续存放,跟对应的编译器有关。
#include #include #include #include #define len sizeof(struct student) #define assert(p) if((p)==null) {printf("指针错误!退出...\n");exit(-1);} //定义学生成绩结构。除了后五项成绩及rank,next外,其余项都可不要。 typedef struct student { int num; //学号 char name[20]; //姓名 char sex; //性别 int age; //年龄 char major[50]; //专业 char class[8]; //班级 float score1; //成绩1 float score2; //成绩2 float score3; //成绩3 float score4; //成绩4 float score5; //成绩5 int listno; //原始编号 int rank; //排序后的编号(最高分者编号为1,依次递增) struct student * next; //链表的下一个结点指针 } node, *pnode; int compsturec2(const void *s1, const void *s2);//qsort的回调比较函数 int main(int argc, char *argv[]) { if (argc<2) { printf("命令格式:\n%s 文件名\n", argv[0]);//由命令行输入文件名 return -1; } //打开文件及定义变量 file *fp; fp=fopen(argv[1],"r"); if(fp==null) { printf("文件打开错!\n"); return -2; } int i=0, j, n=0, items; //n保存记录条数 char line[150]; float x[5];//保存从文件中读来的一行中的各个成绩的 pnode head=null, tail=null, p; //读取文件中的记录,建立链表 rewind(fp); do { memset(line, 0, sizeof(line)); //避免上次的内容影响本次循环,先将line字符串清空 fgets(line,sizeof(line), fp); //从文件中读取一行记录 j=strlen(line)-1; while(isspace(line[j])) //防止空白字符行 line[j--] = '\0'; if(strlen(line)==0) continue; //检查一行中匹配的数据个数是否有5个,少于5个则读下一行 items = sscanf(line, "%f%f%f%f%f",x,x+1,x+2,x+3,x+4); if(items<5) continue; //此行合法数据个数不对, 读取下一行 //正确读取到一行的前5个数.创建结点,保存数据,并把结点加入链表 pnode p = (pnode)malloc(sizeof(node)); assert(p); //为结点赋值 p->score1 = x[0]; p->score2 = x[1]; p->score3 = x[2]; p->score4 = x[3]; p->score5 = x[4]; p->listno = ++i; //原始编号 if (head == null) //创建的是第一个链表结点 { head = p; tail = p; }else //创建的非链表首结点 { tail->next = p; tail = p; } p->next = null; //尾插法,p作为新的链表尾 n++; //结点个数计数 } while(!feof(fp) );//读到文件结束才停止。 //开始用快速排序法排序(库函数提供的) pnode *pp = (pnode *)calloc(n, sizeof(pnode));//指针数组,用于排序 p=head; for(i=0;i { pp[i] = p; p=p->next; } qsort(pp, n, sizeof(pnode), compsturec2);//利用快速排序法排序 for (i=0;i { pp[i]->rank = i+1; } //按照链表顺序(也就是文件行顺序)打印记录 p=head; printf("打印记录:\n"); for (i =0;i { printf("【学生%d】%.1f %.1f %.1f %.1f %.1f [名次:%d] | 后三项和:%.1f \n", p->listno,p->score1, p->score2, p->score3, p->score4, p->score5, p->rank, (p->score3 + p->score4 +p->score5)); //后三个成绩的和 p=p->next; } return 0; } //回调函数,供qsort调用,用来建立比较大小的规则(逆序) int compsturec2(const void *s1, const void *s2) {//恢复s1,s2的真实意义,并取间接运算,保存在变量中 pnode rec1=*(pnode*)s1; //s1是指向一个个的记录元素的指针的二级指针 pnode rec2=*(pnode*)s2; //s2也是指向一个个的记录元素的指针的二级指针 float sum1 = rec1->score3 + rec1->score4 + rec1->score5; //后三项的和 float sum2 = rec2->score3 + rec2->score4 + rec2->score5; //后三项的和 if(sum1 < sum2) //按降序比较成绩。 return 1; //rec1指向的记录“小”,则返回1 else if (sum1 > sum2) return -1; //rec1指向的记录“大”,则返回-1 else return 0; //rec1和rec2“相等”,返回0 }
你输出的是字符串的首地址
您能告诉我%d是什么意思吗???!!! 为什么要把%d当成%p用 看地址 用%p ,建议你再看看格式化输出的相关小知识哦
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
形容一个人长大后有个好命的名字
下列疾病中,应该用抗生素类药物来治疗的疾病
一剑修仙门,门中弟子组阵化出大鸠形状的剑阵
10.1号昆山汽车北站去嘉兴的汽车票还有没
冰袋怎么重复使用,日语中表示重复上个字的字
楼上寝室太吵怎么办
limbo三个小兵吐箭那怎么过
银行开出的五年期借款保函可以提前兑付吗?
明艳粉底膏适合平时用吗?
国务院规定从2008年6月1日起,实行塑料购物袋
打篮球的技巧我得分
国家级紫砂壶大师魏长发
买房别着急 看清类型再下手
什么东西能驱蛇驱蜈蚣?最好也能驱老鼠蟑螂什
怎么让蒜头鼻变得尖一些 蒜头鼻真的很难看啊
推荐资讯
云交易到底是怎么赚钱的
郑州河南财经学院,一年学费多少?
2012年12月的新车,到今年12月满六年,上线检
求 男1985属牛 农历 8月19上午9点左右出生 女
2018年第一个月东风日产哪款车卖得最好?
bios如何设置禁止休眠
从韩国乐天世界到东大门地铁路线
单选题在十一届全国人大第三次会议上,国务院
阿狸珍惜有关的句子,感叹真假朋友的句子
满足下列条件的图形中①对角线长为6和8的菱形
面中注定的总部在哪里???
不知道什么是真爱,最近交了两个女朋友,都是
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?