C语言指针问题

作者&投稿:容素 (若有异议请与网页底部的电邮联系)
C语言指针问题~

是的,就是那里出错了。要为你scanf输入字符串开辟空间,否则,怎么能输入呢

#include
#include
void main()
{
char *p[3],*temp;
int i,j,k;
printf("Please input the string:");
for(i=0;i<3;i++)
{
p[i] = new char[20];
scanf("%s",p[i]); // 我不知道是不是这里出错了,指针数组应该如何输入数据?//
}
for(i=0;i<2;i++); // 用选择排序法把字符串按从小到大的顺序排序//
{ k=i;
for(j=i+1;j<3;j++)
if(strcmp(p[k],p[j])>0)
k=j;
if(k!=i)
{
temp=p[i];p[i]=p[k];p[k]=temp;
}

}
for(i=0;i<3;i++)
printf("%s
",p[i]);
getchar();
getchar();
for(i = 0; i < 3; ++i) delete p[i];
}

int a[2][3], *p[3];
分析:
对于a来说,毫无疑问,a是一个二维数组,a的值指向int类型的起始地址。
对于p,首先p先与'[ ]'结合 p[3],表示p是一个数组,p再与'*'结合成' *p[3] ',表示p数组里面存放的时指针变量,最后与int类型结合成' int *p[3] ',表示数组存放的时指向int类型的指针。
p[0]=&a[1][2];
所以p[0]的值是一个指向int类型的指针。
而a[1][2]的值是一个int类型,再加上'&'(取地址符)得到的就也是一个指向int类型的指针了。
所以p[0]=&a[1][2];成立。
建议ZL看看 《让你不再害怕指针》
回答完毕.

指针是指向一个对象存储位置。

char* line;

它并没有指向某个位置。

char line[100];是一个静态数组,它有一片连续内存,保存数组里的元素值。

所以。
char* line; 它没指向的内存存储 stdin流取出的字符串。

char* line;
fgets(line, 100, stdin);
错误是因为你没有为line分配内存空间

char line[100];//分配了空间
fgets(line, 100, stdin);//OK

char* line = (char*)(malloc(10));//分配了空间
fgets(line, 100, stdin);//OK

char* line = new char[10];//分配了空间
fgets(line, 100, stdin);//OK

你的指针没有分配到内存- -


一个C语言指针的小问题
由于数组名代表数组的首元素的地址,因此ints代表&ints[0],ints+4即为&ints[4],而对于一个多维数组,我们对其取地址,可以理解为得到其上一层的地址,如对ints取地&ints,地球ints代表数组首元素的地址,&ints即为整个数组的首地址,&ints+4代表第四个这样大小数组的地址,虽然ints与&ints...

几道C语言指针方面的问题
楼主你好!!1. int *a;表示声明一个指针变量a,注意a的值是个地址,不是值,这样才表示一个值(前提是a确实指向一个值,不然的话,会是一个随机数):*a,int a=10,*b=&a;表示的是把a的地址给指针变量b。2.B,其中D是错的,因为楼主只是声明一个指针变量,你没有初始化,也就是没有...

C语言指针问题
指针是指向一个对象存储位置。若 char* line;它并没有指向某个位置。char line[100];是一个静态数组,它有一片连续内存,保存数组里的元素值。所以。char* line; 它没指向的内存存储 stdin流取出的字符串。

c语言 指针问题
没有问题,这是习惯写法,只是不能通过s往里面写入,更精确的写法是这样的:const char *s = "\\ta\\017bc";该字符串常量 所占字节数就是6= 5+1

C语言字符指针问题
printf("%c", *p); \/\/ 结果是hprintf("%c" , *(p+1)) \/\/ 结果是e最后是函数引用问题。这里是否能引用p,是需要看你的函数是怎么写的。比如说你说strcmp。他的原型为 extern int strcmp(const char *s1,const char *s2);他两个参数均为指针,当然可以直接使用p这个指针作为参数 ...

关于C语言的字符串指针的问题?
指针和指向的内容都是常量——这时指针不能再指向别处,它指向的内容也不可通过这个指针修改(用其他方法修改内容仍然是可以的)。数组名是常量指针,所以指针不能再指向别处(即改变指向)。这个问题中,p是普通指针,所以可以改变指向;p指向的内容是由malloc申请的自由空间,所以它们的内容肯定是能够改变的...

关于C语言指针的问题~~有谁帮一下~马上就要考试了~
char p=ch;p=&ch;scanf("%c",p=&ch);ch=*p;printf("%c",p=&ch);在c语言中.指针被用来表示内存单元的地址,如果把这个地址用一个变量来保存,则 这种变量就称为指针变量。指针变量也分别有不同的类型,用来保存不同类型变量的地址。严格地说.指针与指针变量是不同的,为了叙述方便,常常把...

关于c语言指针的一些问题。
1、不是说系统64位它就是8字节,而是受限于地址总线的字节宽度,你的地址总线是64位的即指针就是8字节的,但是现在的64位个人pc多半是x86-64能兼容32位的应用程序。2、有,你64 位的机器,它的虚拟内存可以到8TB,如果你在64位机上装个32位的windows你会发现,我的个去……慢的要死(我犯过...

一道C语言指针类问题(有答案,解释一下过程)
从 i=0;i<2;i++ j+=2 这两句,可以得知,分析的字符是p[0][0]、p[0][2]、p[1][0]、p[1][2],即 '3'、'9'、'2'、‘8’if((p[i][j]-'0')%2) 是判断上述字符转换为数字后,哪个是奇数(模2不等于0),可以得知是 '3'、'9'num初始值是0,第一次分析出3后 num ...

C语言的数组和指针问题,谢谢高手的解答!
所以B是一个2级常指针,同样指向二维数组的第一个元素B[0],而B[0]是一个一维数组。总结,问题的关键在于,数组名相当于一个指向于这个数组第一个元素的指针。3)所以,int A[2][3][4]={0};A是一个三维数组,其中A[0]和A[1]都是它的元素,A[0]是第一个元素。所以, A是一个三级...

雄县13816869183: C语言的 指针问题 -
主父试伏萨: 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序.指针极大地丰富了C...

雄县13816869183: C语言的指针问题 -
主父试伏萨: 指针,说白了就是储存数据内存段的地址.打个比方说,你家的门牌号是306,那么你家中回来一些客人,这些客人就相当是一些变量,而门牌号就说明了地址,如果张三在你家,另一个人要找到他,那么此时我们只需要告诉那人306,就相当...

雄县13816869183: c语言指针问题 -
主父试伏萨: 其实这个很好理解的,不要太深究了*P就是一个指针(指向一个内存地址),用指针的时候就是把某个数放到指针的地址中 方法:1. int *p=&a或int *p;p=&a;还可int *p=5;.....当你定义了某一个指针指向某一个数时,在用到的这个数时就直接用指针即*p;例如:int *p=a,c;//求3+5=?和输出5;a=5;c=*p+3;注意输出5时不时输出*p,printf("%d",*p);这是错的*p仅仅只是内存内的一个地址而已是没有数的,假如你这样输出输出的仅仅是这个数在内存内的地址而已.真确的输出printf("%d",a);2.当你调用函数时如果子函数要用到指针形参也是*p哦

雄县13816869183: 请教C语言关于指针的问题 -
主父试伏萨: (1)int *p,*q; q=p; // 未经赋值的指针变量不能使用 int a,*p,*q; p=q=&a; // 这个应该是正确的(2)int a,*p,*q; q=&a; p=*q; // p=*q;明显错误 int a=20,*p; *p=a; //*p=a错误,可以改成p=&a就对了,*p是指针变量p所指向的变量,连地址都没有 ,...

雄县13816869183: C语言中关于指针的指针问题? -
主父试伏萨: 指针变量存的是地址,地址中的内容是数据 二维指针变量存的也是地址,只是址中的内容还是地址 如:int i ; int *p; int **pp; i=0; //i变量中存的是数据10,i是个变量名 p=&i; //p变量中存的是i的地址 *p==i==5 pp=&p ; //pp中存的是p变量的地址 *pp==p==&i **pp==i==5

雄县13816869183: c语言中的指针问题
主父试伏萨: 第一个.*p=*&a;个人认为这种写法不对.至少在C语言中是不对的. 第二个.p=&a;将a的内存地址存放于指针p中. 第三个.*p=&a;将a的内存地址存放与指针p所指向的变量中.

雄县13816869183: C语言指针的问题 -
主父试伏萨: int *temp; 定义为一个指针,要为其赋一个地址,它才有存值的空间,不然里面是个随机地址,会出错.*temp=*p1; 是把 p1所指向的地址里的值赋值给 temp所指向的地址里,但 temp并没有为其指定一个地址.所以运行后会出错.

雄县13816869183: c语言中的指针问题 -
主父试伏萨: 下面给你个例子 #include <stdio.h> void main() { int *p; int a[4]= {1,2,3,4}; p = a; }在上面的环境下,p是指向数组a[0]的,p++后p就指向a[1],(*p)++其实是值1,同时p指向a[1]

雄县13816869183: C语言中关于指针问题 -
主父试伏萨: 我刚刚在VS2010里试了一下, B和C都是错的.计算机题目应该都是单选的, 所以有可能是你有一点的笔误, B如果是(*w+1)[4]就正确了.首先我给你一个最简单的我自己总结的方法吧, 要想从数组或者指针中取数据的话, 要满足这个公式(...

雄县13816869183: C语言指针问题 -
主父试伏萨: 是没有问题的 执行fun(p,0,3);后,把a[0]到a[3]这里面的几个数据的顺序倒过来 结果是 43215...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网