
c语言指针变量问题
#include<Stdio.h>#include<stdlib.h>main(){int*ptr=NULL;intnum,i;printf("请输入待输入的整数的个数"...
#include<Stdio.h>
#include<stdlib.h>
main()
{
int *ptr=NULL;
int num,i;
printf("请输入待输入的整数的个数");
scanf("%d",&num);
ptr=(int *)malloc(num * sizeof(int));
for(i=0;i<num;i++)
{
printf("请输入第%d个整数",i+1);
scanf("%d",&ptr[i]);
}
printf("你输入的整数是:");
for(i=0;i<num;i++)
{
printf("%d",ptr[i]);
}
free(ptr);
return 0;
}
scanf("%d",&ptr[i])是什么意思?printf("%d",ptr[i])可以直接输出ptr指针?ptr不是指针变量吗?为什么使用scanf存入时好要在ptr前加&? 展开
#include<stdlib.h>
main()
{
int *ptr=NULL;
int num,i;
printf("请输入待输入的整数的个数");
scanf("%d",&num);
ptr=(int *)malloc(num * sizeof(int));
for(i=0;i<num;i++)
{
printf("请输入第%d个整数",i+1);
scanf("%d",&ptr[i]);
}
printf("你输入的整数是:");
for(i=0;i<num;i++)
{
printf("%d",ptr[i]);
}
free(ptr);
return 0;
}
scanf("%d",&ptr[i])是什么意思?printf("%d",ptr[i])可以直接输出ptr指针?ptr不是指针变量吗?为什么使用scanf存入时好要在ptr前加&? 展开
展开全部
c 语言中,形式逻辑不成立,指针书写的外形,在声明中和在语句中,外貌相同,意思不同!
int *ptr; 这是声明,声明 ptr 是指针,用于指向 int 型变量。
语句中 *ptr 表示 指针指向的数值, ptr 表示 指针指向的地址。有*的是值,没星号的是地址。
ptr=(int *)malloc(num * sizeof(int)); 这是动态分配,分配了num个int型数值的存放空间,ptr 表示 指针指向的地址(分配了的空间的“始地址”)
你也可以理解成,定态声明了数组: int ptr[num]; 数组名ptr, 有 num个元素。
scanf("%d",&ptr[i]); ptr[i] 是数组第i号元素的值。&ptr[i] 是数组第i号元素的地址。
printf("%d",ptr[i]); 输出 ptr数组第i号元素的值.
---
深入理解:
语句里,ptr[i] 里的[] 实质上是运算符,ptr[i] 等价于 *(ptr+i)。是值。
语句里,&ptr[i] 等价于 (ptr+i) ,是地址。等于: ptr的地址+i * sizeof(int)。
int *ptr; 这是声明,声明 ptr 是指针,用于指向 int 型变量。
语句中 *ptr 表示 指针指向的数值, ptr 表示 指针指向的地址。有*的是值,没星号的是地址。
ptr=(int *)malloc(num * sizeof(int)); 这是动态分配,分配了num个int型数值的存放空间,ptr 表示 指针指向的地址(分配了的空间的“始地址”)
你也可以理解成,定态声明了数组: int ptr[num]; 数组名ptr, 有 num个元素。
scanf("%d",&ptr[i]); ptr[i] 是数组第i号元素的值。&ptr[i] 是数组第i号元素的地址。
printf("%d",ptr[i]); 输出 ptr数组第i号元素的值.
---
深入理解:
语句里,ptr[i] 里的[] 实质上是运算符,ptr[i] 等价于 *(ptr+i)。是值。
语句里,&ptr[i] 等价于 (ptr+i) ,是地址。等于: ptr的地址+i * sizeof(int)。
展开全部
ptr申请了num个int型内存区域后,int *ptr就等价于int ptr[num]。
scanf("%d",&ptr[i])的意思是获取你输入的整数,赋值给ptr[i]。
printf("%d",ptr[i])输出的并不是ptr指针,而是ptr[i]的值,因为数组可以用下标取值。
ptr是指针变量,但是ptr[i]不是指针变量,ptr[i]可以理解为一个int型变量。
使用scanf存入时,&并不是加在ptr上,而是加在ptr[i]上,取的是ptr[i]的地址。[ ]的运算优先级高于取地址符&。
scanf("%d",&ptr[i])的意思是获取你输入的整数,赋值给ptr[i]。
printf("%d",ptr[i])输出的并不是ptr指针,而是ptr[i]的值,因为数组可以用下标取值。
ptr是指针变量,但是ptr[i]不是指针变量,ptr[i]可以理解为一个int型变量。
使用scanf存入时,&并不是加在ptr上,而是加在ptr[i]上,取的是ptr[i]的地址。[ ]的运算优先级高于取地址符&。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、给指针变量赋初值在语法上是没有错误的,编译执行也可以通过,但是一旦代码量增多后,很容易造成指针的错用,为了防止这一问题最好将指针变量定义的时候就置成NULL,这样做是为了代码安全着想。 2、指针定义后就会随机指向一个位置的,编译的时候也不会提示错误,程序短很容易找出来,长了多了就难找了,所以这是一个好习惯吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%d",&ptr[i])是从键盘读入一个十进制整数,并存入到数组元素ptr[i]中。
int *ptr=NULL;
ptr=(int *)malloc(num * sizeof(int));
是根据输入的num的大小动态申请数组的方法。ptr是一个指针(同时也是ptr数组的数组名)
相当于静态申请数组
int ptr[num];
的作用,只是这两都分别从系统的位置不同区域申请内存(初学者可暂时忽略这一点,使用上是完全一样的)。
ptr[i]就是这个数组中的一个成员,加上取地址符&,就是告诉C系统,读取到的数据要存放的位置,
scanf("%d",&ptr[i]);完全等同于scanf("%d",ptr+i);---------scanf函数的使用格式如此,必需要使用数据存放地址的。
int *ptr=NULL;
ptr=(int *)malloc(num * sizeof(int));
是根据输入的num的大小动态申请数组的方法。ptr是一个指针(同时也是ptr数组的数组名)
相当于静态申请数组
int ptr[num];
的作用,只是这两都分别从系统的位置不同区域申请内存(初学者可暂时忽略这一点,使用上是完全一样的)。
ptr[i]就是这个数组中的一个成员,加上取地址符&,就是告诉C系统,读取到的数据要存放的位置,
scanf("%d",&ptr[i]);完全等同于scanf("%d",ptr+i);---------scanf函数的使用格式如此,必需要使用数据存放地址的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int *ptr是指针,malloc了num个int后,ptr指向这段连续的内存,ptr其实就是num个int的数组的头指针,也可以将ptr认为元素是int的数组。[]符号你可以认为是取值操作,那么ptr[0]或者*(ptr)就是第一个元素,ptr[1]或者*(ptr+1)就是第二个元素...
scanf("%d",&ptr[i])就是依次对这个数组(连续的内存)赋值。
scanf的函数定义,这里是个地址,也就是指针,&是取地址操作,也可以写成scanf("%d", ptr+i);
printf("%d",ptr[i])是输出第i个元素(连续内存的第i个值)
scanf("%d",&ptr[i])就是依次对这个数组(连续的内存)赋值。
scanf的函数定义,这里是个地址,也就是指针,&是取地址操作,也可以写成scanf("%d", ptr+i);
printf("%d",ptr[i])是输出第i个元素(连续内存的第i个值)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询