c
KAIFAWORD
这个作者很懒,什么都没留下…
展开
-
数组的4种形式输出
数组内存的首地址和数组第0个元素的地址什么区别? 它们的地址值是相等的; 第0个元素的地址如果是p,则p+1就是第1个元素的地址; 数组的首地址如果是p,则p+1就跳过这个数数组而指向这个数组最后一个元素最后一个字节的下一字节。 #include #include #include main() { int j=0, k,k1,* k3,i; int ch[][4]={{1原创 2016-10-21 15:50:30 · 6364 阅读 · 0 评论 -
函数指针的正常使用,函数指针作为函数参数使用,函数指针作为函数参数使用
函数指针的正常使用 //1 函数指针的正常使用 void test1() { printf("world\n"); } void main() { test1();//call 函数,其实本质就是通过test1这个函数的起始地址进入test1函数里面的代码 //执行这些代码,但是因为test1这个函数的代码本身就存储在代码区的一个内存块, //所以可以用指针进行指向 //那么指针的概念原创 2016-10-18 13:51:38 · 422 阅读 · 0 评论 -
函数指针与指针函数的区别
1、函数指针 首先它是一个指针,只是这个指针指向的是一个函数。指针变量可以指向变量的地址、数组、字符串、动态分配地址,同时也可指向一个函数,每个函数在编译的时候,系统会分配给该函数一个入口地址,函数名表示这个入口地址,那么指向函数的指针变量称为函数指针变量。 指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。 例如:原创 2016-10-18 12:33:25 · 273 阅读 · 0 评论 -
内联函数与宏定义的区别
一、宏定义和内联函数的区别 1. 宏定义不是函数,但是使用起来像函数。预处理器用复制宏代码的方式代替函数的调用,省去了函数压栈退栈过程,提高了效率。 内联函数本质上是一个函数,内联函数一般用于函数体的代码比较简单的函数,不能包含复杂的控制语句,while、switch,并且内联函数本身不能 直接调用自身。如果内联函数的函数体过大,编译器会自动的把这个内联函数变原创 2016-10-17 15:30:23 · 850 阅读 · 0 评论 -
宏定义下要注意,不然会出错
#include #define MAX(a,b) (a)>(b)?(a):(b) int main() { int a=4,b=2,ret; ret=MAX(a,b)+3; printf("=%d,b=%d,ret=%d\n",a,b,ret);//由于运算符‘+’比运算符‘:’的优先级高,所以上述语句并不等价于期望的 return 0; } 结果为;如果正确想要得的结果则修改原创 2016-10-17 14:24:52 · 708 阅读 · 0 评论 -
c宏定义
#include #define MAX(a,b) ((a)>(b)?(a):(b)) int main() { int a=1,b=0,ret; MAX(a++,b); printf("MAX(a++,b):a=%d,b=%d\n",a,b); MAX(a++,b+10); printf("MAX(a++,b+10):a=%d,b=%d\n",a,b); MAX(a++,b); pr原创 2016-10-17 12:16:25 · 370 阅读 · 0 评论 -
extern “C”的使用
用c++来调用c函数的时候,因为c++的函数是函数名+参数编译的结果,在c语言中函数就直接编译成函数,所以要加extern “C”的声明 表示调用的函数是依据c编译的规则原创 2016-10-14 17:00:31 · 281 阅读 · 0 评论 -
printf("%d,%d",*ptr,*(++ptr))的输出语句是从右到左的,所以结果都为,8,8
int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d",*ptr,*(++ptr));原创 2015-01-01 18:37:42 · 1183 阅读 · 0 评论 -
指针的返回结果
#include #include #include #include void fun(int *a, int *b) { int *k; k=a; a=b; b=k; } void main() { int a=3, b=6, *x=&a, *y=&b; fun(x,y); printf("%d %d", a, b); } 结果为3 6 #原创 2015-01-02 00:19:12 · 363 阅读 · 0 评论 -
指针和字符的初始化
#include int main() { int *p1=NULL; int *p2='\0';//转义字符\,所以结果为0 int *p3="\0";//如果写双引号就是字符串了,就是0 int *p4={0}; char a="\0";//不是字符串。表示2个0,以0结尾 char b="0";//表示字符串,0所对应的ascii码表的30,以0结尾 char c={0};//这个才表示原创 2016-09-18 23:10:00 · 433 阅读 · 0 评论 -
参数个数可变函数
在c中,可以这样编写参数个数可变函数 #include void test(int i, ...) { char *p1=(char *)*(&i+1); char *p2=(char *)*(&i+2); printf("p1=%s,p2=%s\n",p1,p2); } int main() { int i=3; test(1,"dewfwrfew","gewagae"); retur原创 2016-10-14 16:56:55 · 381 阅读 · 0 评论 -
fscanf与fprintf的使用
#include #include #include void main(void) { FILE *fp; char str[100]; int a[3]; int i=0,i1,i2,i3,i4,i5,i6; fp=fopen("a.txt","r"); if (fp==NULL) { printf("can not open file\n"); return; }原创 2016-10-25 10:05:46 · 512 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针和指针数组的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4转载 2016-10-19 15:03:07 · 306 阅读 · 0 评论