指针数组、数组指针;指针函数、函数指针的区分

类型                                                                          定义方式

指针数组  :由指针构成的数组                               int  *array[3];     array先于【3】结合成为数组

数组指针  :指向数组的指针                                   int  (*array)[3]  ;  array先于*结合成为指针

指针函数 :能返回指针类型的函数                          int * fun(  int,int) ;    fun先于()结合成为函数

函数指针 :指向函数的指针                                     int  (*fun)( int,int );   fun先于*结合成为指针

指针数组用处:常用于保存字符串

int num1=20,num2=30,num3=40;
int *array[3]={ &num1,&num2,&num3};    //容易理解的定义

char *name[4]={"you","are","good‘,"boy"}  //常用
printf("%s", name[2])  //直接打印name[2]内容good,name[2]=*(name+2)

sizeof(name)  //抓取整个数组内存字节数
sizeof(char*) //抓取char类型指针变量内存字节数

数组指针用处:常用于对应二维数组或作为形参接受二维数组

int array[2][3]={ {1,3,5},
                  {11,33,55}};
int (*arr)[3] ;                  //后面[3]就代表列

arr=array;                        //arr指向了数组首地址

printf("%d", *( *(arr+i) +j) );   // 打印内容格式,i代表行,j代表列

指针函数用处:使子函数能直接返回指针被主函数接受

char *fun( )
{
    char str[50]={"nihao"};   //不正确,str存在动态区
    char static str[50]={"nihao"};  //正确,加static修饰词后,str存储在静态区
    
    return  str;
}

int main()
{
    char *pum;
    pum=str;                   //能直接接受返回值
    printf("%s", pum);         //打印字符串时,%s接收的是首地址

    return 0;
}

函数指针用处:能够用于被调函数的形参,接受任意函数,从而被调函数可以实现任意函数功能

int jia(int x,inty)
{}
int jian(int x,int y)
{}
int process( int (*fun)(int x,int y),int x,int y)   //形参可以接受函数名  
{}
int main()
{
    int cons;
    cons=process( jia ,3,2); // 通过process函数接受jia函数,实现jia函数功能

    return 0;
}

只读指针变量 :int  *pum=&a;             现在pum可以更改指向地址

                          int  * const pum=&a;       从const向左看先与*结合,则pum只能指向a的地址,不                                                                     能再更改其指向的地址,但可以更改指向地址的内容

只读变量指针 :int  const *pum=&a           从const向左看先与Int结合,则pum指向的地址中的内                                                                       容它无权更改,但可以更改其指向的地址

  习题;  十进制转二进制,并考虑正负

#include <stdio.h>

void  count(int array[] ,int x);
int main()
{	
	int i;
	int array[64]={0};	
	
	count(array,64);
	
	return 0;
}

void count(int array[], int x)
{
	int num,i;
	char ch;
	printf("请输入一个数字,加上正负号\n");
	ch=getchar(); 
	scanf("%d", &num);
	for(i=63;i>=0;i--)
	{
		array[i]=num%2;                //将输入的数不考虑正负先用对2取余的方法转为2进制
		num/=2;
	}		
	if(ch=='+')
		;	
	if(ch=='-')                        //判断正负
	{	
		for(i=63;i>=0;i--)	
		{
			if(array[i]==1)
				array[i]=0;             //将负数的0,1反转
			else
				array[i]=1;
		}
		for(i=63;i>=0;i--)
		{
			if(1==array[i])             //反转后加1
				array[i]=0;
			else
			{
				array[i]=1;
				break;
			}	
		}	
	}
	for(i=0;i<64;i++)
		printf("%d", array[i]);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值