> 馆藏中心

刚刚学习C,对指针的写法很迷糊,不同的写法导致程序能否运行下去

来源:cnblogs 编辑:吕秀强

第一题32313133353236313431303231363533e59b9ee7ad9431333330346566#include <stdio.h>void fun1(char* str, int m, int k){ char* p = &str[m - 1]; while (p - str < m + k - 1) { printf("%c", *p); p++; }}int main(){ char str[100]; int m, k; scanf("%s%d%d", str, &m, &k); fun1(str, m, k); return 0;}第二题 #include <stdio.h>void fun2(char* str1, char* str2){ char* p = str1; char* q = str2; while (*p && *q) { if (*p > *q) { return 1; } else if (*p < *q) { return -1; } else { p++; q++; } } if (*p) { return 1; } return -1;}int main(){ char str1[100], str2[100]; scanf("%s%s", str1, str2); fun2(str1, str2); return 0;}本回答被提问者和网友采纳,ajwdioajdoiawjiddawdwadawdwadwww.179s.com防采集请勿采集本网。

struct teacher{

char* name;

谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握了后,你就可以理直气壮地对他人说“我是电脑高手1,而且以后若是再自学其他语言就显得轻而易举了。忧虑的是,C语

int age;

负面影响很大,虽然C++中对指针的使用相比C语言解少了很多,但是学习指针对深入理解程序的运行机制是非常重要的。学好指针可以使你对C/C++程序“知其然,更知其所以然”。

} tec;

使用指针的金科玉律: 在使用指针之前,一定要将指针初始化; 第一个程序中p=&q;将指针初始化了, 第二个程序中没有初始化 你只需要这样做: int t; int *p=&t; 就可以了

//64位程序,字节对齐后16个直接大小

举例:假设程序中开设变量int x=0x1234,*py;py=&x; x地址为0x80000000,py地址为0x80000004 地址 内容 相对编译器的地址别名 0x80000000 0x00001234 x 0x80000004 0x80000000 py 那么: x的地址即&x为0x80000000 py的内容即py为0x80000000 py的

cout << sizeof(tec) << "::" << sizeof(struct teacher) <<endl;struct teacher* t = (struct teacher*)malloc(sizeof(tec));t->name = (char*)malloc(sizeof(char)*5);//如上分别申请结构和字符串的空间,字符串长度只要比“牛玲”长度+1,不发生缓冲溢出就没问题printf("%p %p\n", t->name, t);//这个可看地址的分配情况strcpy(t->name, "牛玲");t->age =19;printf("%s %d\n", t->name, t->age);free(t->name);free(t);fflush(stdout);输出结果

#include int fmax(int a,int b,int c); int fmaxfactor(int d,int e); void fstar(int f); int fgeneral(int g, int h); int main() { int a,b,c,d,e,f,g,h,m,n,p,q=0; scanf("%d%d%d",&a,&b,&c); m=fmax(a,b,c); printf("三个数中最大的是%d\n

16::16

0x55bdb8eaf050 0x55bdb8eaf030

牛玲 19贴的图可见无论10还是20,字符串没有问题,整个过程是对的,问题不是发生在这里,可能是上下文其他地方不对了吧收获园豆:50

============================================

今天早上起来重启之后又好了

呵呵,这2113就是初学者学习指针5261时容易犯的错误4102,第二1653个程序的企图是想直接改专变指针的属地址来改变a,b,c的值,但这样是不可能做到的,因为在C语言中实参变量(比如此题的main函数中exchange(p1,p2,p3);的p1,p2,p3为实参变量)和形参变量(比如此题的exchange(int *q1,int *q2,int *q3)中的*p1,*p2,*p3为形参变量)之间的数据传递是单向的“值传递”方式。指针变量作为函数参数也要遵循这一规则。调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值(比如此题中a,b,c的值)。所以temp=*pt1;*pt1=*pt2;*pt2=temp;改变的就是指针所指变量的值,实参指针此时的值是没有变的,而temp=pt1;pt1=pt2;pt2=temp;根本没有改变到指针所指变量的值,实参指针此时的值也是没有变的。一句话就是实参指针的值一直都不会变,它只能改变到它所指的变量的值,同意楼上的,很详细,怎么说了,C++书都写了,注重指针的C书不可能没有,认真耐心看完书吧,第二种你可以改为swap(int &pt1,int &pt2){int temp; temp=pt1; pt1=pt2; pt2=temp;},第二2113种是对指针进行的操作。把指针5261看成变4102量的话,无论子1653函数对指针如何改变内,主函数里指容针所指向的地址都不会改变。而第一种则是对指针所指向地址的内容进行改变,这个是永久的。这需要说明的是,当对非指针类型的变量进行操作的时候,实际的操作区域是在RAM中,是将a这个值复制到RAM中。而对指针变量进行操作是,如*p,是将p的地址0x1000,复制到RAM中,但是当对p所指内容进行操作时,就不是在RAM中了,而是在0x1000那边了。当子函数退出之后RAM区清空,a当然不会改变,但是*p所指的内容就会有改变了。不知我有没说清楚,如果还不明白请发站内信,swap(int *pt1,int *pt2){int *temp; temp=pt1; pt1=pt2; pt2=temp;}因为第二种的2113指针5261temp没有4102初始化是不对的. 也就像楼上说的,它们只改地址的1653位置,不改版变内容.可是,像我权上面说的.最后没有初始化temp也是种错误,直接用引用还好点内容来自www.179s.com请勿采集。

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。本文《刚刚学习C,对指针的写法很迷糊,不同的写法导致程序能否运行下去》转载自cnblogs,版权归原作者所有,若侵权请联系:E-MAIL:513175919@qq.com
违法违规信息请立即联系本网可获得现金奖励,TEL:1-8-2-1-0-2-3-3-3-8-1(电话仅供违法违规信息举报,侵权类信息请EMAIL。)

www.179s.com false 互联网 http://www.179s.com/jsblogcnk/pd/pddvxp.html report 4540 struct teacher{char* name;int age;} tec;//64位程序,字节对齐后16个直接大小cout << sizeof(tec) << "::" << sizeof(struct teacher) <<endl;struct teacher* t = (struct teacher*)malloc(sizeof(tec));t->name = (char*)malloc(sizeof(

热门图片

经济金融企业管理法律法规社会民生科学教育降生活体育运动文化艺术电子数码电脑网络娱乐休闲行政地区心理分析医疗卫生