首页 > 其他 > 详细

关于C的一些基础问题

时间:2017-03-09 13:15:33      阅读:270      评论:0      收藏:0      [点我收藏+]

1. C语言中逻辑运算符(&&,||,!)和位运算符(&,!,^)的区别

答:在C语言中,经常混淆两组运算符:(&&,||,!)和(&,|,^)。第一组是逻辑运算符,它的操作数是布尔型,而第二组则是位运算,其操作数是位序列。在布尔型操作数中,只有两个数值,0或1.C语言规定,在逻辑运算中,所有的非0数值都要看作1处理。而位序列则可以是有无符号的字符型,整型,长短整型等。在位运算中,是相应的位之间进行逻辑运算。因此,从逻辑上讲,位运算过程包含多个逻辑运算过程。通常,位运算操作数选择无符号型数据。

2.p,*p,&p的区别

答:p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来输出的话,它将是一个16进制数。而*p表示此指针指向的内存地址中存放的内容,一般是一个和指针类型一致的变量或者常量。

而我们知道,&是去抵制运算符,&p就是去指针p的地址,那么这个地址与p有什么区别?区别在于,指针p同时也是一个变量,既然是变量,编译器肯定要为其分配内存地址,就像程序中定义了一个int型的变量i,编译器要为其分配一块内存空间一样。&p就表示编译器位变量p分配的内存地址,而因为p是一个真真变量,这种特殊的身份注定它要指向另一个内存地址,程序员按照程序的需要让它指向一个内存地址,这个指向的内存地址就用p表示。而且,p指向的地址中的内容就用*p表示。

3.int [100],a代表什么,sizeof(a)=?                         a[100]代表什么,sizeof(a[100])= ?

答:int a[100]:声明了一个有100个int类型元素的数组,数组下标从0~99,所以a是数组名,代表数组的首地址,也就是&a[0],sizeof(a)返回数组a在内存中所占的空间大小,以字节为单位,也就是sizeof(a) = sizeof(int) * 100 = 4 * 100 = 400bytes

a[100],表示数组a的第101个元素,所以这里是有问题的,但就按存在a[100],sizeof(a[100])表示求数组的第101个元素在内存中所占的字节数,也就是sizeof(a[100]) = sizeof(int) = 4

4.对于strlen(a)的问题(该问题被作为笔试经典题目之一)

#include <stdio.h>

#include <string.h>

int main(int argc,char** argv)

{

  char a[1000];

  int i=0;

  for(;i<1000;i++)

  {

    a[i] =-1 + i;

  }

  printf("%d\n",strlen(a));

  return 0;

}

答案是255;

原因:char 的取值范围是-128到127。在第256个值时(也即是a[255]),a[255]==0;再加上strlen计算的结果不包含‘\0‘,(sizeof是要计算‘\0‘的)。所以就是255.

首先我们需要明白字符0是‘0‘,而数值0就是0,以及需要明白‘\0‘在计算机中是怎样存储的。字符数字‘0‘的ascii值是48,所以存储的是10形式。而数值0就是00,‘\0‘也是存储的00.strlen是求字符串的长度,不同于sizeof,strlen总是以‘\0‘作为字符串的结束标志。

5. 0x01<< 2+3怎么求算

答:也就是将1左移5位。

例如: int i = 1;

    i = i << 2; //把i里的值左移2位

    也就是说1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里面有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化)。

6.用变量a给出下面的定义

1):一个有10个指针的数组,该指针是指向一个整型数的;

2):一个指向有10个整型数数组的指针;

3):一个指向函数的指针,该函数有一个整型参数并返回一个整型数;

4):一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;

答:1)int *a[10] ;  2)int (*a)[10];  3)int (*a)(int)  4)int (*a[10])(int)

7.C和C++中的struct有什么不同?

答:C和C++中struct的主要区别是C中的struct不可以含有成员函数,而C++中的struct可以。C++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private.

关于C的一些基础问题

原文:http://www.cnblogs.com/zxpzxt/p/6525054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!