请大家给我解答一个c语言结构体指针的指针问题

请各位大神帮我解答一下关于指针和数组的问题,具体请进
[问题点数:20分,结帖人luckytjm]
请各位大神帮我解答一下关于指针和数组的问题,具体请进
[问题点数:20分,结帖人luckytjm]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。您还未登陆,请登录后操作!
请问一个关于C语言结构体的问题
x,*p=&x;
请问1指针是不是只能是字符行
2x前面没定义那他是什么类型他有什么用.
3请问指针P在这里是值请问为什么能指向地址.
4比如*p=a;a是int型我认为是正确的,如果*p=&a就是错的.请问我理解的对吗如果不对为什么,如果对那上面*p=&x是怎么回事啊~~
说一说我的理解,如有不正确之处,请大家指正:
1. 任何类型都有指针,如int*,bool*...
2. x前面的那个结构体就是x的类型。x.a就是那个int变量,x.s就是那个char*。
3. p指向的就是变量x的地址,即p-&a和x.a是同一块内存。
4. 我不知道我没有没理解你的意思,你所说的*p=a,那是赋值语句,意思是将p所指向的地址的值赋成a的值;而*p=&x那是变量声明语句,意思是定义一个struct的指针,名为p,并且赋初值为x的地址!如果语句是
int *p=&a;
那是正确的,因为第二句是变量声明语句,并赋初值,那个*号是表明p的类型而不是取p地址值的意思,即将int*赋初值为int*,所以是正确的;
---------------------------------------
如果语句是
int *p=&a;
那第三句就不正确了,因为第三句是赋值语句,那个*号是取p地址值的意思,即*p就是一个int,而&a是int*,那么将int赋值为int*当然不正确……
说一说我的理解,如有不正确之处,请大家指正:
1. 任何类型都有指针,如int*,bool*...
2. x前面的那个结构体就是x的类型。x.a就是那个int变量,x.s就是那个char*。
3. p指向的就是变量x的地址,即p-&a和x.a是同一块内存。
4. 我不知道我没有没理解你的意思,你所说的*p=a,那是赋值语句,意思是将p所指向的地址的值赋成a的值;而*p=&x那是变量声明语句,意思是定义一个struct的指针,名为p,并且赋初值为x的地址!如果语句是
int *p=&a;
那是正确的,因为第二句是变量声明语句,并赋初值,那个*号是表明p的类型而不是取p地址值的意思,即将int*赋初值为int*,所以是正确的;
---------------------------------------
如果语句是
int *p=&a;
那第三句就不正确了,因为第三句是赋值语句,那个*号是取p地址值的意思,即*p就是一个int,而&a是int*,那么将int赋值为int*当然不正确……
希望对你有帮助……
中分配地址就可以指向,指针变量也可以指向另一个指针变量
2、结构体类型
3、p是指针变量,指针就是内存地址,指针存在指针变量里
4、那是指针定义的同时进行了赋值
比如 int *p=&i; 定义了一个指向整型的指针变量,然后把i的地址赋给指针变量p
这句其实是 int *p; p=&i; 这么两句
您的举报已经提交成功,我们将尽快处理,谢谢!
大家还关注C语言编程常见问题解答之指针和内存分配(4)
&&&&7.3&&什么是空指针?
&&&&7.10&NULL总是等于0吗?
&&&&20.2&程序总是可以使用命令行参数吗?
&&&&7.5&&什么是void指针?
&&&&void指针一般被称为通用指针或泛指针,它是C关于“纯粹地址(raw&address)”的一种约定。void指针指向某个对象,但该对象不属于任何类型。请看下例:
&&&&int&&&&*
&&&&void&&&&*p;
&&&&在上例中,ip指向一个整型值,而p指向的对象不属于任何类型。
&&&&在C中,任何时候你都可以用其它类型的指针来代替void指针(在C++中同样可以),或者用void指针来代替其它类型的指针(在C++中需要进行强制转换),并且不需要进行强制转换。例如,你可以把char&*类型的指针传递给需要void指针的函数。
&&&&请参见:
&&&&7.6&&什么时候使用void指针?&&&&
&&&&7.27&可以对void指针进行算术运算吗?
&&&&15.2&C++和C有什么区别?
&&&7.6&什么时候使用void指针?
&&&&当进行纯粹的内存操作时,或者传递一个指向未定类型的指针时,可以使用void指针。void指针也常常用作函数指针。
&&&&有些C代码只进行纯粹的内存操作。在较早版本的C中,这一点是通过字符指针(char&*)实现的,但是这容易产生混淆,因为人们不容易判断一个字符指针究竟是指向一个字符串,还是指向一个字符数组,或者仅仅是指向内存中的某个地址。
&&&&例如,strcpy()函数将一个字符串拷贝到另一个字符串中,strncpy()函数将一个字符串中的部分内容拷贝到另一个字符串中:
&&&&char&&*strepy(char’strl,const&char&*str2);
&&&&char&&*strncpy(char&*strl,const&char&*str2,size_t&n);&&&&
&&&&memcpy()函数将内存中的数据从一个位置拷贝到另一个位置:
&&&&void&&*memcpy(void&*addrl,void&*addr2,size_t&n);
&&&&memcpy()函数使用了void指针,以说明该函数只进行纯粹的内存拷贝,包括NULL字符(零字节)在内的任何内容都将被拷贝。请看下例:
&&&&#include&"thingie.h"&&&&
&&&&struct&thingie&*p_src,*p_dest;
&&&&memcpy(p_dest,p_src,sizeof(struct&thingie)&*&numThingies);
&&&&在上例中,memcpy()函数要拷贝的是存放在structthingie结构体中的某种对象op_dest和p_src都是指向structthingie结构体的指针,memcpy()函数将把从p_src指向的位置开始的sizeof(stuctthingie)&*numThingies个字节的内容拷贝到从p_dest指向的位置开始的一块内存区域中。对memcpy()函数来说,p_dest和p_src都仅仅是指向内存中的某个地址的指针。
&&&&请参见:
&&&&7.5&&什么是void指针?
&&&&7.14&什么时候使用指向函数的指针?
&&&&7.7&&两个指针可以相减吗?为什么?
&&&&如果两个指针向同一个数组,它们就可以相减,其为结果为两个指针之间的元素数目。仍以本章开头介绍的街道地址的比喻为例,假设我住在第五大街118号,我的邻居住在第五大街124号,每家之间的地址间距是2(在我这一侧用连续的偶数作为街道地址),那么我的邻居家就是我家往前第(124-118)/2(或3)家(我和我的邻居家之间相隔两家,即120号和122号)。指针之间的减法运算和上述方法是相同的。
&&&&在折半查找的过程中,同样会用到上述减法运算。假设p和q指向的元素分别位于你要找的元素的前面和后面,那么(q-p)/2+p指向一个位于p和q之间的元素。如果(q-p)/2+p位于你要找的元素之前,下一步你就可以在(q-p)/2+p和q之间查找要找的元素;反之,你可以停止查找了。
&&&&如果两个指针不是指向一个数组,它们相减就没有意义。假设有人住在梅恩大街110号,我就不能将第五大街118号减去梅恩大街110号(并除以2),并以为这个人住在我家往回第4家中。
&&&&如果每个街区的街道地址都从一个100的倍数开始计算,并且同一条街的不同街区的地址起址各不相同,那么,你甚至不能将第五大街204号和第五大街120号相减,因为它们尽管位于同一条街,但所在的街区不同(对指针来说,就是所指向的数组不同)。
&&&&C本身无法防止非法的指针减法运算,即使其结果可能会给你的程序带来麻烦,C也不会给出任何提示或警告。
&&&&指针相减的结果是某种整类型的值,为此,ANSIC标准&stddef.h&头文件中预定义了一个整类型ptrdiff_t。尽管在不同的编译程序中ptrdiff_t的类型可能各不相同(int或long或其它),但它们都适当地定义了ptrdiff_t类型。
&&&&例7.7演示了指针的减法运算。该例中有一个结构体数组,每个结构体的长度都是16字节。
&&&&如果是对指向结构体数组的指针进行减法运算,则a[0]和a[8]之间的距离为8;如果将指向结构体数组的指针强制转换成指向纯粹的内存地址的指针后再相减,则a[0]和aL8]之间的距离为128(即十六进制数0x80)。如果将指向a[8]的指针减去8,该指针所指向的位置并不是往前移了8个字节,而是往前移了8个数组元素。
&&&&注意:把指针强制转换成指向纯粹的内存地址的指针,通常就是转换成void&*类型,但是,本例将指针强制转换成char&*类型,因为void。类型的指针之间不能进行减法运算(见7.27)。
例&7.7&指针的算术运算
#&include&&stdio.&h&
#&include&&stddef.h&&
struct&stuff&{
&&&&char&&&name[l6];
&&&&/&*&&other&stuff&could&go&here,&too&&*&/&
struct&stuff&array&[]&=&&{
&&&&{&"The"&&},
&&&&{&"quick"&&},
&&&&{&"brown"&&&,
&&&&{&"fox"&},
&&&&{&"jumped"&&},
&&&&{&"over"&&},
&&&&{&"the"&&},
&&&&{&"lazy"&&},
&&&&{&"dog.&"&&},
&&&&{&"&"&}&
&&&&struct&stuff&&&&&&&&&*&p0&=&&.array[0];
&&&&struct&stuff&&&&&&&&&*&p8&=&&-array[8];
&&&&ptrdiff_t&&&&&&&&&&&diff&=&p8-p0;
&&&&ptrdiff_t&&&&&&&&&&addr.diff&=&(char&*&)&p8&-&(char&*&)&p0;
&&&&printf&("&array[0]&=&p0&=&%P\n"&,&&(void*&)&p0);
&&&&printf&("&.&array[8]&=&p8&=&%P\n"&,&(void*&)&p8)&;&
&&&&cast&the&ptrdiff_t’s&to&long’s
&&&&(which&we&know&printf&()&can&handle)&
&&&&printf&("The&difference&of&pointers&is&%ld\n"&,&(long)&diff)&;
&&&&printf&("The&difference&of&addresses&is&%ld\n"&,&(long)&addr_diff);
&&&&printf&("p8-8&=&%P\n"&,&(void*)&(p8-8));
&&&&/&*&&example&for&FAQ&VII.&8&&*&/
&&&&printf&("p0&+&8&=&&%P&(same&as&p8)\n",&&(void*&)&(p0&+&8));
&&&&return&0;&&&&/&*&&see&FAQ&XVI.&4&&*&/&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。一道c语言程序设计题。第一幅图是题目。第二幅图是答案。第三幅图是我自己写的。请大神解释一下我的为什么不对?那里不对?可不可以不像标准答案那样新定义一个指针t呢?_百度作业帮
一道c语言程序设计题。第一幅图是题目。第二幅图是答案。第三幅图是我自己写的。请大神解释一下我的为什么不对?那里不对?可不可以不像标准答案那样新定义一个指针t呢?
两个问题,1.a[i]='A'&&a[i]
二级c语言在线讲解向各位大侠请教一下野指针的问题_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:289,803贴子:
向各位大侠请教一下野指针的问题收藏
小弟我刚学C语言,看到指针的时候有些不明白,特来请教一下,比如:void swap( int *p1,int *p2 ){int *p;*p = *p1;*p1 = *p2;*p2 = *p;}书上提示这段程序有野指针的问题,这个野指针是“野”在哪里呢?我搜索了一下,发现百度百科说的野指针的一种情况就是指针没有初始化的话是会乱指一气的,这段的野指针是不是就是这个问题。另外我还看到:void swap(int *a, int *b) {
//标准的交换两个数的函数这个好像是正确的,但我觉得这段和上一段除了把指针*p换成变量t外其他都一样,难道这段就没有野指针的问题吗?还是我想错了,希望大侠能指点一下,谢谢。
warning: 'p' is used uninitialized in this function [-Wuninitialized]
第一个swap声明的是指针 要给指针赋值 指针才可以正常是用
第二个swap声明的是变量 当然可以用于数据交换
不懂楼主为嘛不懂…………
还是那句话,,p指向的是随机值(鬼知道p指向哪段内存空间?),没有初始化,一旦指向了系统区就会影响系统的正常运行。
举例来说:已有变量int i=10; 函数1的p可能指向i的地址,执行函数后也就非法修改了i的数值。。。函数 2的t有自己的地址,不会影响其它的内存地址,因此是安全的。
楼主能解释 和int *p;是什么意思吗? 别和我说这是定义一个整数和定义一个指针.这只是字面的意思.
任何变量在使用之前,最好初始化,除非是你打算赋值。而*p=
这已经不是赋值了。
Int *p 只是申明这是一个指针,但并没有世纪地址,要使用就得p=&a;或者p=(int*)malloc(sizeof(int));
感觉第一个明显是错的,首先定义就不对不应该定义成*p,即使定义了后也要对其初始化(指像一个空间)如果不初始化,像题中给*p赋值就不知道赋给了谁,那不就乱了.
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 c语言函数指针 的文章

 

随机推荐