您的位置:首页 > 编程语言 > C语言/C++

C语言基础2:位运算,指针,数组

2015-05-26 17:16 459 查看

1、位运算的总结:

**

1.1、& 按位与**

只有对应的两个二进制位均为1时,结果位才为1,否则为0.


1.2、| 按位或

只要对应的两个二进制位有一个为1时,结果为就是1,否则为0.


1.3、^ 按位异或

当对应的二进制位不同时,结果为1,否则为0.


1.4、~ 取反

对整数a的各二进制进行取反,符号位也取反(0变为1,1变为0)


1.5、>>右移运算

把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方

为正数时, 符号位为0,最高位补0

为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定

1.6、<<左移

把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方

由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性

2、指针

2.1指针定义

指针就是一个存储对应类型的空间的地址的变量。


// 指针类型 * 指针名称
int *p;
char *p;
double *p;


指针的作用很强大,他可以改变别人改变不了的东西。比如const 修饰的常量


#include <stdio.h>

int main(int argc, const char * argv[]) {

const int a = 10;
int * p = &a;

// a的值不能直接改变
//    a = 11;

// a的值可以通过指针来改变
*p = 20;

printf("a的值是:%d\n",a);

return 0;
}


输出结果:



2.2 指针:常量指针与指针常量的区别

const int *p;           //p是指针常量,p指向的值不能更改
int * const p;          //p是常量指针,p指针的值不能更改
const int * const p;    //p指针的值不能更改,p指向的常量的值也不能更改


2.3 指针所占的空间大小

无论什么类型的指针,它所占的空间大小就是4byte(32位机器)8byte(64位机器)


2.4指针函数与函数指针

指针函数:就是返回值是指针类型的函数


// 指针函数f,即f是一个函数,它的参数是一个整形的指针,返回值是整形的指针
int * f(int * p);


函数指针:就是这个指针的类型是一个函数类型


// f是一个指针,它指向一个函数,该函数的参数是一个整形的指针,返回值是一个整形的
int (*f)(int * p);


函数指针和指针函数的混合考察:


void *(*(*fp1)(int))[10];

/*
fp1是一个指针,该指针指向以函数,该函数的参数是int型,返回值一个指针,该指针指向一个数组,该数组有10个元素,每个元素是一个void*类型的指针。
*/

float(*(*fp)(int,int,int))(int);

/*
fp是一个指针,指向一个函数,函数参数为3个int类型,返回值是一个指针,该指针指向一个函数,参数是int类型,返回值是float类型
*/

int (*(*fp3)())[10]();

/*
fp3是一个指针,指向一个函数,该函数参数为空,返回值是一个指针,该指针指向一个数组,该数组有10个元素,每个元素是一个指针,指向一个函数,这个函数的参数为空,返回值是int型。
*/


3、数组

3.1数组的定义:

类型 数组名[长度]
数组的长度是固定的,在C语言中没有变长数组,而且该长度也必须是一个常量。

数组名就是数组的首地址。


3.2测试数组的长度:

int a[10];
printf("数组a的长度是:%d",sizeof(a)/sizeof(int));

// 输出结果为10


3.3数组名的特殊意义:

// 数组名不单单是数组元素的首地址,它代表整个数组的空间

int a[10] = {0};
printf("数组的空间大小:%d",sizeof(a));

// 输出结果为40
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息