c c++ 学习笔记
文章平均质量分 52
夜风雪
从事android框架开发工作
展开
-
.推算内存中16进制数,实际保存到数
12345678910111213141516171819202122232425262728左边一列是文件地址,中间是每个字节的十六进制表示,右边是把这些字节解释成ASCII码所对应的字符00000070 ff ff 00 00 00 90 01 00 80 80原创 2012-12-17 17:20:23 · 1361 阅读 · 0 评论 -
c 语言 : 局部变量 、全局变量、static变量 register变量 总结(更新)
添加对函数中的静态变量理解,函数中的静态变量可以实现统计函数的调用次数,而不必担心被意外修改。 #include const int file_scope_const_var = 10;//这种变量在定义时必须初始化,之后不能再赋值。int file_scope_var = 20; // 全局变量(GLOBAL)static int file_scope_satic_var原创 2013-05-17 16:12:31 · 1197 阅读 · 0 评论 -
通过参数分配内存需要两层的指针,而通过返回值分配内存就只需要返回一层的指针.?
通过参数分配内存需要两层的指针,而通过返回值分配内存就只需要返回一层的指针.因为传参数分 传值 和 传地址。要改变所指向的内存单元的地址,即改变指针变量的内容,需要传地址,要用指针,即要指向指针的指针。而返回值则可以直接返回地址。转载 2013-06-19 11:41:44 · 1509 阅读 · 0 评论 -
usleep 和 sleep
USLEEP(3) Linux Programmer's Manual USLEEP(3)NAME usleep - suspend execution for microsecond intervalsSYNOPSIS #include原创 2013-06-19 17:12:11 · 961 阅读 · 0 评论 -
字符串分割 strtok
start char *strtok(char *str, const char *delim);str 被分割的字符串, delim 分割符号,如“:/ ” 字符串中有:或者 / 就用‘\0' 替换。#include #include int main(){ char str[] = "http://write.blog.csdn.net/postlis原创 2013-06-20 16:14:14 · 1054 阅读 · 0 评论 -
c 可变参数 定义可变参数的函数
定义可变参数的函数,需要在stdarg.h头文件中定义的va_list类型和va_start、va_arg、va_end三个宏。定义可变参数函数va_list ap; //实际是定义一个指针va_start(ap,num); // 用va_start宏,让ap指向num参数后面的那个参数。 int i = va_arg(ap,int); // va_arg(ap,int) 读取原创 2013-06-20 14:10:59 · 956 阅读 · 0 评论 -
读写文件1——以字节为单位,读写文件(笔记实例)
start #include int fseek(FILE *stream, long offset, int whence); //第二个参数和第三个参数决定将要移动到的位置, 操作失败返回-1 //第二个参数是移动的字节数(正数向文件尾移动,负数向,文件头移动。 //第三个参数,是开始移动的位置,SEEK_SET(文件头),S原创 2013-06-21 14:22:52 · 1531 阅读 · 0 评论 -
printf转换说明的可选项
表 25.1. printf转换说明的可选项选项描述举例#八进制前面加0(转换字符为o),十六进制前面加0x(转换字符为x)或0X(转换字符为X)。printf("%#x", 0xff)打印0xff,printf("%x", 0xff)打印ff。-格式化后的内容居左,右边可以留空格。见下面的例子宽度用一转载 2013-06-21 15:35:35 · 1303 阅读 · 0 评论 -
64位进程调用32位dll的解决方法
64位进程调用32位dll的解决方法最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的遇到了64位进程需要调用32位dll的问题。由于有一些32位dll没有源代码,无法重新编译为64位dll,所以只能想办法解决64位进程调用32位dll问题,转载 2013-06-30 14:42:38 · 1534 阅读 · 0 评论 -
__attribute__ ((visibility("default")))
Attribute Definitions Specific to g++ 作为对visibility属性(详见于“Visibility Attributes and Pragmas for GCC C++ Libraries”)的补充,g++提供了2个额外的属性,即init_priority(priority)和java_interface属性。 The init_prior转载 2013-09-03 19:43:57 · 5508 阅读 · 0 评论 -
函数式宏定义的几种情况
//main.c #define MAX(a,b) ((a)>(b)?(a):(b)) //a、b必须用括号扩起来。因为可能是个表达式,展开后运算优先级会变化k = MAX(i&2,j&2);#define STR(s) # s // #是个运算符,只能用于函数式宏定义,用于创建字符串。 s中有多个连续的空间或原创 2013-05-21 16:09:48 · 1785 阅读 · 0 评论 -
对象指针—指向对象成员的指针
2013-02-21 来源: 中国站长 关键字: 对象指针 对象 成员 指针 对象有地址,存放对象初始地址的指针变量就是指向对象的指针变量。对象中的成员也有地址,存放对象成员地址的指针变量就是指向对象成员的指针变量。1、指向对象数据成员的指针定义指向对象数据成员的指针变量的方法和定义指向普通变量的指针变量方法相同。例如 int *p1; //定义转载 2013-09-04 19:43:59 · 1196 阅读 · 0 评论 -
Makefile 规则 , 规则中的变量
1、Makefile 介绍:Makefile由一组规则组成,每条规则的格式:目标:条件1 条件2 条件3。。。 命令1 命令2 命令3条件可以是.o文件,.c文件,.h文件 条件之间用空格隔开命令是gcc,mkdir,rm 等。 每条命令前面必须有一个tab,不能是空格。 一个命令换行必须加上 \2、源文件原创 2013-05-22 13:49:02 · 1137 阅读 · 0 评论 -
指针和引用有什么区别 请写一个简单的程序说明
1.从内存上来讲 系统为指针分寸内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内容空间。2指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不允许再重新绑定对象。3.所以引用访问对象是直接访问。指针访问对象是间接访问。4。如果pa是指针,那么*pa就是引用了。但是两者在作为形参的时候非常相似,区别是指针拷贝副本,引用不拷贝。程序如转载 2014-08-05 14:14:30 · 621 阅读 · 0 评论 -
C++ 函数声明中指定,默认参数
C++ 在声明函数的时候,如果指定了,参数的默认值,再调用函数的时候可以省略后面的参数。如果调用函数写上的参数,但是不全。参数列表后面的使用默认值。如下例子,一看就清楚了。#include int add(int a=0, int b=0, int c=0);int main(){ printf("-->> result = %d\n",add()); printf(原创 2013-06-18 16:26:47 · 2122 阅读 · 0 评论 -
C\C++的main()的正确写法
在 C89 中,main( ) 是正确的。Brian W. Kernighan 和Dennis M. Ritchie 的经典巨著 The C programming Language(《C 程序设计语言》)用的就是 main( )。不过在最新的C99 标准中,只有以下两种定义方式是正确的: int main( void ) int m转载 2013-06-18 14:04:25 · 1557 阅读 · 0 评论 -
函数指针类型、函数表、接口理论笔记(更新)
函数指针的定义:void (*point_fun)(const char *str);point_fun先和*结合是指针,()是函数运算符,所以这个指针是指向函数的#include void say_hello(const char *str);void (*point_say_hello)(const char *str);//point_say_hello先和*结原创 2013-06-18 13:16:16 · 1012 阅读 · 0 评论 -
C语言register关键字—最快的关键字
(2012-08-24 14:09:24)转载▼标签:杂谈分类:C register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。注意是尽可能,不是绝对。你想想,一个CPU的寄存器也就那么几个或几十个,你要是定义了很多很多register变量,它累死也可能不能全部把这些变量放入寄存器吧转载 2013-05-17 16:06:43 · 763 阅读 · 0 评论 -
union 、大小端字节存储
union 的长度是最长成员的长度,只能初始化第一个成员,其他的成员值,是根据自身类型,从第一个成员中获取。 也就是union变量可以根据第一个成员存储,获取的方式是多种的#include int main(int argc, char** argv){ union { char a; int b; } s;原创 2013-05-20 12:31:33 · 972 阅读 · 0 评论 -
静态库的编译 共享库的编译链接运行 及共享库的区别(1)
1、这些文件的目录结构是:$ tree.|-- main.c`-- stack |-- is_empty.c |-- pop.c |-- push.c |-- stack.c `-- stack.h1 directory, 6 files2、我们把stack.c、push.c、pop.c、is_empty.c编译成目标文转载 2013-05-20 16:43:19 · 940 阅读 · 0 评论 -
anroid c编译 android.mk 的编写注意事项
1 #include 2 int main(){ 3 printf("hello worldlang \n"); 4 return 0; 5 } 1 LOCAL_PATH := $(call my-dir) 2 include $(CLEAR_VARS) 3 LOCAL_MODULE_TAGS := optional 4 L原创 2013-05-03 11:15:42 · 721 阅读 · 0 评论 -
C语言inline详细讲解
本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源转载 2013-05-21 13:39:42 · 1478 阅读 · 0 评论 -
静态库的编译 共享库的编译链接运行 及共享库的区别(2)
1、组成共享库的目标文件和一般的目标文件有所不同,在编译时要加-fPIC选项,$ gcc -c -fPIC stack/stack.c stack/push.c stack/pop.c stack/is_empty.c-f后面跟一些编译选项,PIC是其中一种,表示生成位置无关代码(Position Independent Code)gcc -shared -o libstack.so转载 2013-05-21 09:41:03 · 752 阅读 · 0 评论 -
指针与const限定符 const int * p 与 int * const p 的 区别
先看 const int a = 2; a的值是只读。const int * p 与 int * const p 的 区别 ,。可以这样理解:以*为分界点把变量分成两部分, 看const修饰谁。const int * p:const 修饰的是int 所以 把const int 看成是一种类型,很显然 这种类型的内存是只读的。p指针本身不是只读int * const p:c原创 2013-05-24 15:24:32 · 1453 阅读 · 0 评论 -
c 全局变量和局部变量
如果全局变量在定义时不初始化则初始值是0,如果局部变量在定义时不初始化则初始值是不确定的。所以,局部变量在使用之前一定要先赋值,如果基于一个不确定的值做后续计算肯定会引入Bug。转载 2013-05-13 15:30:46 · 648 阅读 · 0 评论 -
二维数组和指针
二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组下面我们讨论指针和二转载 2013-05-29 10:15:52 · 800 阅读 · 0 评论 -
指针的指针
#include int main(int argc, char *argv[]){ int number = 20; int *point = &number; int **d_point = &point; printf("point = %p, d_point = %p *d_point = %p\n", point, d_point, *d_原创 2013-05-29 11:06:53 · 727 阅读 · 0 评论 -
二维数组和二重指针 的疑问 二维数组名为什么不能直接赋值给二重指针
#include extern void print_double_point_address_value_p(int **p, int *p1);void main(){ int array[3][2] = {10,11,12,13,14,15}; int *array3[2]; int **pa3 =&array3[0];原创 2013-05-29 14:51:32 · 2337 阅读 · 1 评论 -
一维数组和指针 array、&array[0]和&array的区别,指针数组char *p[5]和数组指针char (*p_array)[5]区别。
char array[5] = {'a','b','c','d','e'};array的长度和&array[0] 长度是一个字节,都是指向第一个数组元素。array+1的长度和&array[0]+1,都是加一个字节长度,指向第二个元素。&array的长度是数组的长度是五个字节,(sizeof(array)获取到长度),&array执行数组array。&array+1 是指向数组array后原创 2013-06-14 16:19:16 · 3483 阅读 · 0 评论 -
多维数组和指针数组 Linux C编程一站式学习习题答案
char a[4][3][2] = {{{'a', 'b'}, {'c', 'd'}, {'e', 'f'}}, {{'g', 'h'}, {'i', 'j'}, {'k', 'l'}}, {{'m', 'n'}, {'o', 'p'}, {'q', 'r'}}, {{'s', 't'}, {'u', 'v'}, {'w', 'x'}}};char (*pa)[2原创 2013-06-16 11:41:48 · 1522 阅读 · 0 评论