c语言经典面试题

一、二级指针什么时候用

        1、把无序的物理地址变为连续的线性逻辑;(物理上无序,逻辑上有序)[链表]

数组,是连续的线性逻辑,通过下标的递增,保证了逻辑上的连续性

数组里不保存普通值,而保存地址,假设这个地址指向的内存是char类型

        char *buf[5];  char **p = buf;

例如main函数的参数,通过argv来获取用户输入的参数

argv[0,1,...2,...3];

        2、子函数更新主函数中变量值的方式

                传统上,主函数定义了一个int空间,子函数就必须接收一个int * 的变量,通过这个变量,反向更新,将主函数中的int空间的值进行修改;

        子函数中 *p = xxx;

那么,如果子函数中想更新一个int * 的值,必须传递一个int * * 的变量来达到同样的效果;

        子函数更新主函数一维地址空间的时候;

直接初始化0,所以已经初始化,由结束标志,输出hello;

形参的数组名不是数组的真实空间,是指针变量大小,所以循环次数可能是8或4;

sizeof(str)/sizeof(str[0]);计算数组长度;

str字符个数要加1;要算字符个数要用strlen();

strlen("")=0;strlen空串是0,该函数不会计算\0;

数组名是没有盒子来存这个地址的,&a值和a一致,行为

&a + 1,是一个数组一个数组加,指针的地址会到a数组后面,

答案2  5;//*(a +1)从数组的首地址加一个int的地址,指向2;

两种写法一样,

*strArr[],//装的字符串地址,把字符串地址线性逻辑化;

char *(*pstr)[6];pstr6个地址6个地址走,一个字节一个字节访问;

(*p)[4]//存的是地址,4个int4个int地访问地址;

int a[3][4] = {1,2,3.....}//二维数组看后面那个来操作空间,a是4个int4个int地访问地址;

假如 i =  1,j = 2;

a[1][1] =5; a[0][0]=1; 

*(*(p+i)+j)  = p[1][2] = 7;

1、二进制位中1的个数

方法一:data不变,把1左移进行与位运算;

方法二:把data右移,与1与位运算;最终data可能把低位的1都推走,剩下的数就是0,没必要数;

方法三:减一借位相与位运算;

任意空间1的个数;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值