這幾天的代碼段

//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
/*//傳遞指針的指針;
可以修改指針的內容
#include<stdio.h>
#include<stdlib.h>
void all(int **arr,int  size,int value)
{
	int i;
	*arr=(int *)malloc(size *sizeof(int ));
	printf("%#x\n",arr);
	printf("%#x\n",*arr);

	if(*arr!=NULL)
	{
		for(i=0;i<size;i++)
		{
			*(*arr+i)=value;
		}
	}
//	free(*arr);
}
void main()
{
	int *p=NULL;
	printf("%#x\n",p);
	all(&p,5,45);
	printf("%d\n",p[2]);
	printf("%#x\n",p);
}

//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
///*
#include<stdio.h>
#include<stdlib.h>
void all(int *arr,int  size,int value)
{
	int i;
	printf("%#x\n",arr);
	arr=(int *)malloc(size *sizeof(int ));
	printf("%#x\n",arr);
	if(arr!=NULL)
	{
		for(i=0;i<size;i++)
		{
			*(arr+i)=value;
		}
	}
		printf("%d\n",*arr);
}
void main()
{
	int *p=NULL;
//	int i;
	printf("%#x\n",p);
	all(p,5,45);

	printf("%#x\n",p);
}



//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------


//函數指針的應用
#include<stdio.h>
int  mianji()
{
	int a=3;
	int b=4;
	int c;
	c=a*b;
	return c;
}

void  main()
{

	typedef int (*f)();
	f f1;
	f1=mianji;
	printf("%d",f1());

}


  
//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
//傳遞函數的指針
#include<stdio.h>
int add(int num1,int num2)
{
	return num1+num2;
}
int sub(int num1,int num2)
{
	return num1-num2;
}
//typedef	int (*ftr)(int,int);
int (*ftr)(int ,int );

int compute(int (*ftr)(int ,int ),int ,int );

void main()
{

  printf("%d\n",compute(add,1,2));
  printf("%d\n",compute(sub,3,5));

}
int compute(int (*ftr)(int ,int ) ,int num1,int num2)
{
	return  ftr(num1,num2);
}


//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------

//返回函數指針
#include<stdio.h>

int add(int num1,int num2)
{
	return num1+num2;
}

int sub(int num1,int num2)
{
	return num1-num2;
}

typedef	int (*ftr)(int,int);

int compute(ftr,int ,int );
ftr select(char opcode)
{
   switch(opcode)
   {
   case '+':
	   return add;
   case '-':
	   return sub;
   }
}

int eva(char opcode,int num1,int num2)
{
	ftr f1=select(opcode);
	return f1(num1,num2);
}

void main()
{
  printf("%d\n",eva('+',1,5));
}
int compute(ftr f1 ,int num1,int num2)
{
	return  f1(num1,num2);
}
//typedef的用法
#include<stdio.h>
void main()
{
	typedef int a[2];
	typedef int *d[3];
	d g;

	a f;
	f[1]=4;
	g[2]=&f[1];
	printf("%d--%d--%d",f[1],&f[1],g[2]);
}
//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
//使用函數指針數組
//第一種思想

#include<stdio.h>
typedef void (*ftr)();

     void ss()
	{
		printf("%d\n",8);
	}
	
	void aa()
	{
       printf("%d\n",100);  
	}

	void ab()
	{
       printf("%d\n",10);  
	}
ftr f1[]={ss,aa,ab};
void main()
{
   f1[0]();
}
//第二種思想
#include<stdio.h>
typedef int (*operation)(int ,int );
operation operations[128]={NULL};

int add(int num1,int num2)
{
	return num1+num2;
}

int sub(int num1,int num2)
{
	return num1-num2;
}

void in(){
	operations['+']=add;
	operations['-']=sub;
}

int eva(char opcode,int num1,int num2)
{
   // operation ss;
   //ss=operations[opcode];
  //return ss(num1,num2);
    return operations[opcode](num1,num2);
} 
void main()
{
  in();
  printf("%d\n",eva('-',5,6));

}




//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
//比較函數指針
ftr f1=add;
if(f1==add)
{
printf("函數地址一致是add");
}
else
{
	printf("函數地址不一致;不是add函數");
}


//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
//轉換函數指針
#include<stdio.h>
typedef int (*ptr)(int);
typedef int (*ptr1)(int ,int );
int add(int a ,int b)
{
	return  a+b;
}
//void*不一定能跟函數指針上void *p=add;
//這是錯的
void main()
{
	ptr1 aa=add;
    ptr bb=(ptr)aa;
	aa =(ptr1)bb;
    printf("%d\n",aa(5,6));
}


//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
//void指針
#include<stdio.h>
void main()
{
	void *p;
  printf("%#x---%d",&p , sizeof(void *));
  printf("\n%#x---%d",*&p , sizeof(void *));
  //printf("\n%d",*p);error
}







//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
#include<stdio.h>

typedef int (*ptr1)(int ,int );
int add(int a ,int b)
{
	return  a+b;
}
void main()
{
	void *p;
	ptr1 aa=add;
    p=(void*)aa;
//	printf("%d\n",aa(5,6));
	aa=(ptr1)p;
    printf("%d\n",aa(5,6));
}




//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------

//作爲參數的數組聲明
#include<stdio.h>
void main()
{
	char hello[]="hello";
	printf("%s\n",hello);//在這裏數組作爲參數和數組首地址作爲參數是一樣的效果
	printf("%s\n",&hello);
	printf(hello);
	printf("\n");
}

//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------


//混淆指針和指針所指向的數據
#include<stdio.h>
void main()
{
	char *p,*q;
	p="sssaa";//實際含義是P指向一個內容爲“sssaa\0”的字符數組的指針
	printf(p);
//	*(p+1)='a';//這樣定義的字符串常量只有只讀屬性ANSI C中標準禁止對string literal 作出修改
//	printf(p);
	printf("\n%#x\n",p);//含義是p指向的那個數組的首地址
	printf("%#x\n",&p);//含義是p的內存地址
	q=p;//複製指針並不同時複製指針所指向的數據
    //q[1]='Y';//error
	printf(q);



}



//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
#include<stdio.h>
void main(){
	int i;
	int a[6];

	for(i=0;i<=6;i++)
	{
        a[i]=0;

	}
	printf("%d",a[6]);
//		for(i=0;i<=6;i++)
//	{
  //     printf("%d",a[i]);

	//}


}



//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
//由0轉換而來的指針不等於任何有效的指針,不能用該指針指向內存中的內容
if(p==(char *)0)//true
if(strcmp(p,(char *)0)==0)//false


//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------

//函數功能爲:將一個長度無規律的輸入數據送到緩衝區中(即一塊能容納N個字符的內存)中去,
//------每當這塊內存被填滿時,就將緩衝區的內容寫出




//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
#include<stdio.h>
void main()
{
	float a=3.99999999;
	printf("%f",a);

}


//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
#include<stdio.h>
void main()
{
	size_t f=100;
    printf("%d",f);
}




//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
#include<stdio.h>
 
int main()
{
int k;
k=sizeof('A');
printf("%d\n",k);//中在c語言k的大小爲4,c++中它的大小爲1.
//system("pause");
return 0; 
}

//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
//字符串的拼接
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main(){
	char *error="ERROR: ";
	char *errorp="one world one dream!";
	char *ftr=(char *)malloc(strlen(error)+strlen(errorp)+1);
	strcpy(ftr,error);
	strcat(ftr,errorp);
	printf("%s\n",error);
	printf("%s\n",errorp);
	printf("%s\n",ftr);

}
//-------------------------------華麗分割線 *#)- o -(#*  -----------------------------------------
//字符串的拼接----error這個是錯的
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main(){

	char * error="error";
	char *errorp="kkkkkkkkkkkkkkkkkkk";
	strcat(error,errorp);
	printf("%s\n",error);
	printf("%s\n",errorp);
}*/

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