C语言知识整理
文章平均质量分 64
黑色芒果
这个作者很懒,什么都没留下…
展开
-
动态数组的使用(一维动态数组、二维、三维、N维)
之前对于不定长度的数据一直都是用链表存储的,会使用malloc和new命令,但一直没想到把最基本的数组也用动态的方式存储。下面是用C中的malloc命令写的创建动态数组的代码:#include#includeint* createarray(){ int* HeadOfArray; HeadOfArray=(int*) malloc(sizeof(int)*10);//a[10]原创 2015-01-05 19:39:36 · 698 阅读 · 0 评论 -
printf 输出格式
(因为文章时间太久且被多次转载,不能标注出处)转载 2015-01-06 08:32:22 · 548 阅读 · 0 评论 -
calloc、malloc、realloc的用法与区别
0**alloc——memory allocation 动态内存分配三个函数原型:extern void *malloc(unsigned int num_bytes);void *calloc(size_t n, size_t size);extern void *realloc(void *mem_address, unsigned int newsiz原创 2015-01-05 21:54:18 · 475 阅读 · 0 评论 -
printf输出%f %lld问题。输出类型和数据类型不匹配会发生什么?
——总结自《C PRIMER PLUS》直接看三个例子: int a=4; printf("%f %e\n",a,a); float b=4; printf("%f %e\n",b,b); int n1=-1,n2=-2,n3=-3; printf("%lld %lld %lld\n",n1,n2,n3);运行结果为:可见,输出结果并非像预期的那样会自行转原创 2015-01-06 10:32:54 · 7455 阅读 · 2 评论 -
C 的输入输出流和缓冲区
C++的输入输出流和缓冲区一、 C++ 输入输出的含义 以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C++的输入与输出包括以下3方面的内容: 1、对系统指定的标准设备转载 2015-01-05 22:11:48 · 692 阅读 · 0 评论 -
变量的生命周期和{ }的相关知识
生命周期如果和寄存器、内存什么的挂钩,就变得不那么好理解。、其实生命周期的概念也很简单,无非就是变量从哪到哪有效。这里只说生民周期和大括号{ }的联系浅显一点说,一个变量的生命周期就是从上一个 { 开始,到下一个 } 结束为止[1]看这么一个程序,就会对生命周期的概念更了解一点int main(){//1 int a=5; {//2 int b=0; b+原创 2015-01-16 11:09:02 · 1844 阅读 · 1 评论 -
strcuct结构体创建时使用typedef的命名方式
[1] 不用typedef时的结构体形式:struct student{ int age; int score;}stu,*pstu;这样的语句的含义简单明了,就是定义了一个结构体,同时创建了两个student结构的变量stu和*pstu。访问内部元素方式:stu.age=1;pstu->age=1;(*pstu).age=1;[2] 比较好用的形式:ty原创 2015-01-15 15:15:18 · 747 阅读 · 0 评论 -
C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
内存分配方式内存分配方式有三种:[1] 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量, static 变量。[2] 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中 ,效率很高,但是分配的内存容量有限。[3] 从堆上分配,亦称动态内翻译 2015-01-16 14:31:20 · 532 阅读 · 0 评论 -
2015-1-9 知识总结
整理自《你必须知道的495个C语言问题》[1]指向函数的指针void function(int &a,int &b){ int temp; temp=a; a=b; b=temp;}int main(){ int a=12,b=3; function(a,b); void (*p)(int&,int&); p=function; (*p)(a,b);}要点:原创 2015-01-09 10:27:39 · 394 阅读 · 0 评论 -
【趣味题】输出蛇形矩阵(由内向外、由外向内)、输出Z字形矩阵。
1.输出蛇形矩阵,由外层向内层和由外层向内层。下面贴上由外层向内层的代码:#include#define N 10int a[N][N]={0};int count;void fill_value_around(int line,int column){ if(line>column) return; else if(line==column) a[line][col原创 2015-01-07 10:48:14 · 1996 阅读 · 0 评论 -
字符串处理函数的一些问题
[1] strcpy函数的问题对于两个char[ ]: char destination[N],char source[M],如果source的长度大于destination的长度,那么实际上在内存中,source中的字符已经全部存储到以destination为起始的内存中了。所以实际上strcpy函数是不安全的,相比之下使用可以限制拷贝位数的strncpy函数更加安全。实例:原创 2015-01-12 16:24:53 · 384 阅读 · 0 评论 -
使用malloc、calloc函数分配内存空间和存储内容不匹配时引发的错误!
下面是昨天遇到问题的一个简化版本:#include#include#include#includechar* copy(char a[]){ char *newc=(char *)malloc(sizeof(char)); strcpy(newc,a); return newc;}void err(char a[],char b[]){ a=copy(a);b=copy原创 2015-01-13 11:33:08 · 2392 阅读 · 0 评论 -
char s[] 和 char *s,
[1] 前面已经提到过,对于下面的代码:char s1[]="hello";char *s2="hello";s2是指向常量的指针,只能访问不能修改;s1是字符串的首地址,可以访问,可以修改值。[2] 新的问题对于下面的的函数,希望能够在调用函数后修改s的地址void fun(char *&s){ s++;}用同样的s1,s2调用该函数:fun(原创 2015-01-12 17:25:11 · 592 阅读 · 0 评论 -
OJ上二位动态数组分配的一个错误记录
对于一道简单的二维数组的问题,不想却遇到了大麻烦。最后经过指点,才知道:int** a=(int** )calloc(m,sizeof(int*));int** a=(int** )calloc(m,sizeof(int));这两句话在32位和64位下大有问题!就因为写的第二句,在OJ上一直RE!查来查去没有注意到这一点,因为在32位原创 2015-01-10 14:39:34 · 361 阅读 · 0 评论 -
2015-1-6 const和指针
首先来定义两个数组作为说明的例子。 int a[10]={0}; const int b[10]={0};一、对于Int a[10]={0}看下面几个指针初始化的代码: int *error_p;//1 *error_p=4; int *p=a;//2 const int* p1=a;//3 int const* p2=a;//4 int* const p3=a;//5原创 2015-01-06 22:26:35 · 432 阅读 · 0 评论