C语言指针问题171
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言指针问题171相关的知识,希望对你有一定的参考价值。
以下程序统计从终端输入的字符中每个大写字母出现的次数,num[0]用来统计字母A出现的次数,其他依次类推。用#号结束输入,请填空。
#include"stdio.h"
#include"ctype.h"
main()
int num[26]=0,i;
char c;
while(_____!='#')
if(isupper(c)) num[_____]+=1;
for(i=0;i<26;i++)
if(num[i]) printf("%c:%d\n",i+'A',num[i]);
两个填空应该怎么填呢?谢谢你们了。
至于第二个空,因为A对应的下标是0,所以其他大写字母所对应的下标是
c-'A'。 参考技术B 1. (c=getchar()) != '#'
2. num[ c-'A' ]+=1本回答被提问者采纳 参考技术C 1. (c=getchar()) != '#'
2. num[ c-'A' ]+=1 参考技术D (c=getchar())!='#'
num[c-65]+=1;
c语言指针变量问题
#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前加&?
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)。 参考技术A 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]的地址。[ ]的运算优先级高于取地址符&。 参考技术B 1、给指针变量赋初值在语法上是没有错误的,编译执行也可以通过,但是一旦代码量增多后,很容易造成指针的错用,为了防止这一问题最好将指针变量定义的时候就置成NULL,这样做是为了代码安全着想。 2、指针定义后就会随机指向一个位置的,编译的时候也不会提示错误,程序短很容易找出来,长了多了就难找了,所以这是一个好习惯吧。 参考技术C 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函数的使用格式如此,必需要使用数据存放地址的。 参考技术D 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个值)
以上是关于C语言指针问题171的主要内容,如果未能解决你的问题,请参考以下文章