C标准的基本指针和数组

时间:2014-02-20 08:27:36

标签: c arrays pointers

您好
我不得不使用C语言实验室的指针编写程序。说我必须使用指针作为参数(我知道数组是指针我只是使用函数来让老师开心)。

简而言之,我必须制作两个方法,一个用于显示给定字母在字符数组中出现的字符数,并将结果作为平均值输出,并且每次出现时都会在其旁边打印一个“*”。

问题是我在显示器上得到了时髦的数字 对不起格式化,不知道如何在这里正确使用

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char Ar[] = "alot of words here";


void getFrequency(char*, int*);
void displayVHist(char*, int*);

int main (void){

int ABStats[26], i, *pABS;
char Alphabet[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O',  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'Y', 'X', 'Z'};
char *pAr = Ar, *pA = Alphabet;
pABS = ABStats;

for (i=0;i<26;i++){
    ABStats[i] = 0; 
}//end for

getFrequency(pAr, pABS);
displayVHist(pA, pABS);


}//end main

void getFrequency(char *ar1, int *ar2){

int letter;

while(*ar1 != '\0'){

    letter = isalpha(*ar1)?(toascii(toupper(*ar1))-'A'):-1;

     if(letter != -1){
         *(ar2 + letter) += 1;       
     }//end if
     ++ar1;
 }//end while
}//end function

 void displayVHist(char *ar1, int *ar2){

 double average;
 int i, j, total;

for(i = 0; i < 26; i++){
     total += *ar2;
    ++ar2;
}//end for

for(i = 0; i < 26; i++){
    average =  ((double)(*ar2)/total)*100;
    printf("'%c' (%lf) ",*ar1 ,average);
    for(j=0;j=*ar2;j++){
        printf("*");        
    }//end 
    printf("\n");
    ++ar1;
    ++ar2;
}//end for
}//end 

1 个答案:

答案 0 :(得分:0)

displayVHist函数中,您有两个循环。两者都使用,并修改ar2变量。第一个循环完成后,ar2变量不再指向调用函数时传递的内容。

要解决此问题,您可以将第一个(或第二个)循环使用局部变量。如果你为第二个循环使用局部变量,只需记住在第一个循环之前将其初始化为


正如其他人所说,数组不是与指针相同。但是,由于数组衰减为指针(例如,当您将数组作为参数传递给函数时,函数接收指向数组的第一个条目的指针),您可以在数组上使用指针算法。反之亦然,你可以使用带指针的数组索引。

因此,例如,表达式*(ar2 + letter)等于ar2[letter]