各種筆試題

1,sizeof

#include "stdafx.h"
#include <stdio.h>
int main(int argc, char* argv[])
{
 int i = 1,count = 0;
 int szint[4]={5,8,9,4};
 char szchar[10]={ 'a','b','c','\0'};
    int *pint = &i;
 int(*p)[5];
 int *q[5] ;

 printf("int = %d\n",sizeof(int));//4
 printf("char = %d\n",sizeof(char));//1
 printf("void * = %d\n",sizeof(void *));//4
 printf("long = %d\n",sizeof(long));//4
 printf("float = %d\n",sizeof(float));//4
 printf("short = %d\n",sizeof(short));//2
 printf("szchar[10]{'a','b','c'} = %d\n",sizeof(szchar));//10
 printf("unsigned int = %d\n",sizeof(unsigned int));//4
 printf("unsigned short = %d\n",sizeof(unsigned short));//2
 printf("pint = %d\n",sizeof(pint));//4
 printf("(*p)[5] = %d\n",sizeof(p));//4
 printf("*q[5] = %d\n",sizeof(q));//20

return 0;
}

2,alloc,malloc,calloc(網上整理)

alloc
原型:void *_alloc(size_t size);
malloc
原型:void * malloc(size_t size);
calloc
原型:void* calloc(size_t size, int count);

alloc

本函數與上述的兩個函數不同,因爲它是在棧上分配了size大小的內存,因此使用此函數分配的內存不用再擔心內存釋放的情況了。但是使用此函數需要注意的是:在函數內部使用此函數分配的內存隨着函數的終結不復存在,因此不能將此函數分配的內存供函數外部使用。

malloc
該函數將在堆上分配一個size byte大小的內存。它分配的單原完全按字節大小計算,因此如此分配N個單原的student_t,

那麼要這樣實現:(stdent_t *)malloc(N * sizeof (student_t));

calloc
該函數解決了上面的函數的不足,它將分配count個size大小的單原,因此在便用此函數的時候就會很方便,比如對上面的例子就可以:(student_t *)calloc(sizeof(t_student), N)就可以了。這樣使用就會很清晰的知道分配的內存是一種什麼樣的邏輯方式。

注:

malloc與calloc沒有本質區別,malloc之後的未初始化內存可以使用memset進行初始化。

realloc是在malloc的基礎上增加內存分配,free函數用來對分配在堆的內存進行釋放以防內存泄漏的產生。

sbrk函數用來向os申請數據段,供malloc,calloc及realloc申請使用。

New和delete是c++中的運算符,調用malloc申請內存後初始化爲對象,用delete釋放。

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章