
【C 】
文章平均质量分 83
雪天飞山狐狸
吃饱穿暖活下来
展开
-
指针浅谈
回首谭浩强《C++程序设计》,第二篇,来说下指针。主要介绍的是:①指针与引用在函数参数传递时的比较。②指针与数组的关系。⑴函数可以说是任何程序设计语言必不可少的组成部分。一种语言如果会有更好的机制来支持函数实现,可以说该种语言就会有更大的生机。(一家之言)C++函数的参数传递有三种方式:①值传递②指针传递③引用传递。以下的代码中调换两数的函数中,swap_1()用的是值传递方式、s转载 2013-08-19 17:41:26 · 791 阅读 · 0 评论 -
const 指针与指向const的指针
当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。听起来有点混淆一会放个例子上来就明白了。先说指向const的指针,它的意思是指针指向的内容是不能被修改的。它有两种写法。const int* p; (推荐)int const* p;第一种可以理解为,p是一个指针,它指向的内容是const int 类转载 2013-08-17 17:21:50 · 540 阅读 · 0 评论 -
C语言 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string); /*遇到转载 2013-08-22 09:54:09 · 727 阅读 · 0 评论 -
char *和char数组的区别(深拷贝和浅拷贝的观点)以及内核访问用户空间
char *和char数组真的相同吗?我们以实例为证: typedef struct { char * s1; char * s2; }PARAM,*PPARAM; int main(int argc, char *argv[]) { PARAM pa1,pb1; pa1.s1 = "abcd"; pa1.s2 =转载 2012-10-23 10:03:25 · 941 阅读 · 0 评论 -
malloc和free函数详解
本文介绍malloc和free函数的内容。 在C中,对内存的管理是相当重要。下面开始介绍这两个函数: 一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该转载 2013-08-16 09:41:07 · 725 阅读 · 0 评论 -
va_start_va_end_的使用和原理
1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:先介绍一下可变参数表的调用形式以及原理:首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,栈顶低地转载 2013-08-16 09:53:07 · 659 阅读 · 0 评论 -
各种指针的定义
各种指针的定义:1,一个整形数: int a;2,一个指向整形数的指针: int *a;3,一个指向指针的指针,它指向的指针指向一个整形数: int**a;4,一个有10个整形数的数组: int a[10];5,一个有10个指针的数组,每个指针指向一个整形数: int *a[10];6,一个指向有10个整形数的数组的指针: int (*a)[10];7,一个指向指针的指转载 2013-08-17 17:22:13 · 1032 阅读 · 0 评论 -
c语言详解sizeof & sizeof函数总结
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式: sizeof(type)转载 2012-09-24 21:20:09 · 2237 阅读 · 0 评论 -
va_start和va_end使用详解
本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(...);voi转载 2013-08-16 09:41:48 · 648 阅读 · 0 评论 -
C语言的数组初始化
这是很基础的东西,但基础的重要性不言而喻,我敢肯定这个知识点我肯定曾经了解过,但现在,我不敢确定,由此可见纪录的重要性,这世界没有什么捷径,找对方向,然后不停重复.所以从今天开始,我会比较详细的纪录这些比较小的知识点,其实还是有不少有意思的地方的. 写这篇文章的起因在于>第七章新东西太多,看的我目不暇接,所以在网上找了些例子看,其中就有一个例子中出现了这样的语句: ...转载 2013-11-19 10:19:22 · 910 阅读 · 0 评论 -
递归和迭代的区别
递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合.使用递归要注意的有两点:1)递归就是在过程或函数里面调用自身;2)在使用递归时,必须有一个明确的递归结束条件转载 2014-09-16 17:10:53 · 1077 阅读 · 0 评论 -
最值得阅读学习的 10 个 C 语言开源项目代码
点击打开链接伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz 。之前@伯乐头条 曾发过一条微博:『C 语言进阶有哪些优秀的代码可以阅读?』http://t.cn/R72EdtY 。今天来看看 平凡之路 推荐的《最值得阅读学习的 10 个 C 语言开源项目代码》。1. WebbenchWebbench是一个在linux下使用的非常简转载 2015-07-23 09:24:06 · 673 阅读 · 0 评论 -
c语言,连接2个数组的方法???
首先你不能直接用静态数组连接,因为你无法控制编译器如何分配内存,事实上分配在堆上的数组是由操作系统分配的,因此你不能指望两个数组是连续排列的,所以连接数组只能重新分配一个能包容两个数组元素的新数组,并将两个数组的元素复制过去,然后释放掉原先的数组。用动态数组实现以下核心代码:int * Link(int *a,int lenA,int *b,int lenB) { int转载 2015-07-22 14:18:22 · 8006 阅读 · 0 评论 -
C语言:将输入的字符串(char* cp)存入字符指针数组(char * spa[])
在C++下面读入string类型,存入vector中非常的简单。在C语言下面读入string倒是很简单,但是要存入指针数组中貌似费了很大的劲都不行。C还是四年之前看过,对于C下面的字符串一直很恐惧,今天下定决心,要好好研究一下cp)存入字符指针数组(char * spa[])" title="C语言:将输入的字符串(char* cp)存入字符指针数组(char * spa[])" style="m转载 2015-07-22 14:17:34 · 5962 阅读 · 2 评论 -
10个经典的C语言面试基础算法及代码
1、计算Fibonacci数列Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。C语言实现的代码如下:/* Displaying Fibonacci sequence up to nth term where n is entered by user. */#include int main(){ int转载 2015-07-23 09:43:15 · 1756 阅读 · 1 评论 -
C语言变长数组data[0]【总结】
1、前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度是可变的,根据需要进行分配。方便操作,节省空间。2、data[0]结构经常遇到的结构形状如下:struct buffer{ i转载 2015-07-22 14:16:54 · 410 阅读 · 0 评论 -
数组-数组合并(C版)
[cpp] view plaincopyprint?#include /**从小到大排序**/ void sort(int array[],int length) { int i,j; for(i = 0; i for(j = i;j if(array[j]转载 2015-07-22 14:16:02 · 707 阅读 · 0 评论 -
C函数参数传递
最近一直在研究C语言,即使用的是C++编译器,也常常不经意就用C代码来实现功能了。呵呵。但是,随手翻了翻一般C语言的基础课本,觉着熟悉的不得了,又对以前的问题产生了兴趣。在以前学习过程中,笔者常常将C函数的参数传递:值和指针弄不清。每次都是试着去做,调试成功了就对了,从来不曾去认真去总结过,今天有空将其总结了一下子,包括对C语言指针和内存分配等也进行了讨论,呵呵C函数参数传递的方法:值传递转载 2013-08-17 16:48:47 · 816 阅读 · 0 评论 -
C语言联合体union
在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。首先看一段代码:union myun { struct { int x; int y; int z; }u; int k; }a; int main()转载 2012-11-02 07:52:41 · 678 阅读 · 0 评论 -
C语言中"\0"和空格的区别
\0 为字符串结束符,比如说:abcd (空格)cdefg;存入数组时,空格作为一个字符占有一个字节的空间,我们可以把它看着一个字符去处理。而“\0 ” 则是这个字符串的结束标识符,也占有一个字节的空间,表示字符串结束!char a[]={'a','b','c','d', ,'c','d','e','f','g','\0'}'a''b''转载 2013-08-22 09:54:46 · 18423 阅读 · 0 评论 -
c和c++的复杂类型声明理解
c和c++的复杂类型声明理解曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的”右左法则”。需要强调一下的是,复杂转载 2012-11-02 14:40:18 · 820 阅读 · 0 评论 -
彻底搞定C指针-函数名与函数指针
函数名与函数指针一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){ MyFun(10); //这里是调用MyFun(10);函数 return转载 2012-12-13 22:01:27 · 468 阅读 · 0 评论 -
C语言字符串函数详解
void *memset(void *dest, int c, size_t count);将dest前面count个字符置为字符c.返回dest的值. void *memmove(void *dest, const void *src, size_t count);从src复制count字节的字符到dest.如果src和dest出现重叠,函数会自动处理.返回des转载 2013-08-15 09:59:16 · 734 阅读 · 0 评论 -
sizeof、strlen之一
解析C/C++语言中的sizeof一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(ty转载 2013-08-15 16:25:24 · 694 阅读 · 0 评论 -
sizeof 、strlen之二
c语言中判断数据类型长度符 用法 sizeof(类型说明符,数组名或表达式); 或 sizeof 变量名 1. 定义: sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。 MSDN上的解释为: The sizeof keyword gives the a转载 2013-08-15 16:23:03 · 742 阅读 · 0 评论 -
c语言中数组名a和&a详细介绍
其实这两个东西挺难理解的,应该也没有那么重要,了解一下好了,主要还是要多多理解数组指针的运算 最近又把学习c语言提上日程上来了~~~先把我打算看的书都写下来吧,,系类,先说说a和&a的区别(有三点,三个方向):1.是a和&a的本质,都是什么类型的。2.从2维数组的角度看。3.从指针运算的角度看。声明:虽然数组名不是指针,但是用的很像指针,我们暂且把它叫做一个指针吧。转载 2013-08-23 17:19:03 · 3035 阅读 · 1 评论 -
解析C语言中的sizeof
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括原创 2012-09-25 15:19:33 · 754 阅读 · 0 评论 -
C平台下,读入未知数目的输入
这种情况下,我们不知道要对多少个数求和,而是要一直读数直到程序输入结束。输入结束时,程序将总和写到标准输出: #include int main() { int sum = 0, value; // read till end-of-file, calculating a running total of all values原创 2012-10-13 16:50:26 · 1132 阅读 · 0 评论 -
指针函数与函数指针的区别
一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值转载 2012-12-13 21:56:26 · 357 阅读 · 0 评论 -
经典的2个C语言面试题目
以前面试遇到的,好像很多面试的人都遇到过这些题目,现在贴出来,并写上答案,找工作的朋友可以参考参考。1.将字符串“ABCD1234abcd”倒转。#include #include #include int main() { char str[] = "ABCD1234abcd"; int length = strlen(str);转载 2013-06-04 14:29:38 · 687 阅读 · 0 评论 -
常见的C字符串处理函数的源代码
char *strcpy(char *strDes, const char *strSrc){ assert((strDes != NULL) && (strSrc != NULL)); char *address = strDes; while ((*strDes ++ = *strSrc ++) != '\0') NULL; ret转载 2013-08-15 10:04:17 · 774 阅读 · 0 评论 -
C的动态内存管理--mallac()和free()
关于c的动态内存管理一直是个经久不衰的话题,面试也是基本上都会考的,本来感觉已经明白了,但是今天使用的时候一不小心导致程序崩溃了,因此深入的去查了下资料,收获不少...贴出来与大家分享...先贴个错误代码:int * ptr = (int *)malloc(256);ptr = ptr + 3;//对指针进行一个偏移操作free(ptr);这就是一段错误代码..?相信已转载 2013-06-04 14:24:02 · 852 阅读 · 0 评论 -
C语言的二级指针与二维数组
指针是C语言的一大特色,它就像一把双刃剑:使用得当能够给程序带来极大的灵活性和高效性;反之,程序就会变得难以调试,漏洞百出!众所周知,指针实质就是地址!一个变量的地址即称为此变量的“指针”。如果有这样一种变量:它的存储单元里存放的是其它变量的地址!我们就称之为“指针变量”。(请注意两者之间的区别:两个完全不同的概念!)我们都知道,数组名和函数名就是它们的入口地址。同理,一个变量名其转载 2013-08-17 17:16:50 · 1413 阅读 · 0 评论 -
C语言中Malloc的使用
malloc函数:原型:extern void *malloc(unsigned int num_bytes);用法:#include 功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。举例:// malloc.c#include >转载 2013-09-10 15:21:57 · 1021 阅读 · 0 评论 -
12个有趣的C语言面试题
摘要:12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!1.gets()函数问:请找出下面代码里的问题:#include int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets(buff); printf("\n The buffer转载 2013-09-10 15:28:59 · 773 阅读 · 0 评论 -
函数参数的传递问题(一级指针和二级指针)
原以为自己对指针掌握了,却还是对这个问题不太明白。请教! 程序1: void myMalloc(char *s) //我想在函数中分配内存,再返回 { s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(p); //转载 2015-07-23 11:16:22 · 613 阅读 · 0 评论