如何使用动æ€åˆ†é…而ä¸æ˜¯é™æ€int?

时间:2016-06-14 09:32:59

标签: c arrays pointers static allocation

 int* asciiCode(char c1, char c2){
   static int asciiCode[126];
   /code/
   /code/
   return asciiCode;
 }

在这ç§æƒ…况下,我å¯ä»¥ä½¿ç”¨allocate而ä¸æ˜¯static intå—?我ä¸ç¡®åˆ‡çŸ¥é“上é¢æŒ‡é’ˆæ•°ç»„的元素数é‡ï¼Ÿå¦‚果是,我该怎么åšï¼Ÿ

2 个答案:

答案 0 :(得分:0)

  

在这ç§æƒ…况下我å¯ä»¥ä½¿ç”¨allocate而ä¸æ˜¯static intå—?

是的,åªè¦ä¸€äº›ä¾‹ç¨‹ä¹Ÿfree()分é…内存。

  

我ä¸ç¡®åˆ‡çŸ¥é“上é¢æŒ‡é’ˆæ•°ç»„的元素数é‡ï¼Ÿ

代ç ä¸­æ²¡æœ‰æŒ‡é’ˆæ•°ç»„。如果你的æ„æ€æ˜¯int数组,那么项目的数é‡ä¼¼ä¹Žæ˜¯126.这看起æ¥å¾ˆå¥‡æ€ªï¼Œæ—§çš„7ä½ASCII有128个符å·ï¼Œè€Œä¸æ˜¯126个。

  

如果是,我该怎么åšï¼Ÿ

使用malloc然åŽè¿”回一个指针。

答案 1 :(得分:0)

这是一个您å¯èƒ½ä¼šè§‰å¾—有用的示例。 array被分é…并在åŽç»­è°ƒç”¨ä¸­ä½¿ç”¨ï¼Œä»¥ä¾¿æ¨¡æ‹Ÿä½¿ç”¨é™æ€æ•°ç»„æ¥ä¿å­˜è°ƒç”¨ä¹‹é—´çš„值。

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

int* asciiCode(char c1, char c2, int *asciiCodeArr, int size ){
   int static counter = 0;

   if(asciiCodeArr==NULL)
   {
     asciiCodeArr = (int *) malloc( sizeof(int)* size);
     if(!asciiCodeArr) return NULL;
   }

   printf("c1=%c ",c1);
   printf("c2=%c ",c2);

   asciiCodeArr[counter] = c1;
   counter = counter + 1;

   asciiCodeArr[counter] = c2;
   counter = counter + 1;

  return (asciiCodeArr);
 }

int main(void) {
    int i;
    int *array=NULL;
    int size = 128; // To Hold 128 - 7bits Standard ASCII characters 

    array = asciiCode('1', '2', array, size);
    if(!array){
        printf("allocation error!\n");
        return -1;
    }

    // array = 
    asciiCode('3', '4', array, size);

    printf("\narray content in hex: ");    
    for(i=0;i<4;i++)
    {
       printf("%X ", array[i]);
    }

   free(array);
   return 0;
}

输出:

c1=1 c2=2 c1=3 c2=4 
array content in hex: 31 32 33 34