A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© wxh794708907 中级黑马   /  2015-7-20 16:40  /  776 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

整型变量修饰符:(int  short  long  longlong  signed  unsined);

改变整型变量占用的存储空间:
int short long longlong
short int a =1;(2个字节 占16位)
最小的负数是10000000 00000000;想要打印出来可以通过a1=a<<15;
最大的正数是01111111 11111111;想要打印出来可以通过a2=(a<<15)-1;
它所占的范围是[-32768,32768];

int b = 1;(4个字节 占32位)
想要打印出来可以通过a1=a<<31;
想要打印出来可以通过a2=(a<<31)-1;
它的范围是[-2147483648,-2147483648]

long int c =1;(8个字节,占64位)
同理可以通过上面的方法打印出来它的范围;

改变一个数的符号:表示原来最高位用做标识一个数的正负,现在用来参与计算;
计算机默认是一个有符号数。

无符号数用%u来输出;
例如 unsigned short d = 0-1;printf("%u",d)
signed  unsigned(表示无符号)

char 型常量的存储问题:
sizeof('a')
----->先找到'a'的ascii码值 97
----->把97按照int类型进行
----->所以它会把4个字节存储到内存中;而在变量中则是一个字节存储的;
总结是 char的常量和变量的存储方式不一样;

int len =sizeof("a");(因为是常量的a 所以它的字节数是4)
char ch ='a';
len = sizeof(ch);(因为是变量ch所以a这个字符的字节数是1)
ch = ch -32;(因为字符变量a在ascii码值中对饮的数是97 所以减完之后是65 然后在去ascii码表中找对应65的字符是A)
printf("%c",ch)(输出一个字符就是大写字母A;)

0 - 127 这个范围用作常见的字符的ascii码;


数组:一组具有相同数据类型的数据的有序的集合;

数组元素:构成数组的数据,数组中的每一个数组元素具有相同的名称,不同的下标,可以作为单个变量使用,所以也称为下标变量;

数组属于构造类型;

数组的下标:是数组元素的位置的一个索引或指示或者叫数组元素的编号;

按存储的内容分类:
数值数组:用来存储数值的;

字符数组:用来存储字符‘a’;

指针数组:用来存放指针(地址)的;

结构数组:用来存放一个结构体类型的数据;

一维数组的定义:类型说明符 数组名[常量表达式];
例如int a [10] 表示定义了一个int类型的 数组名为a的数组长度为10的一维数组,这个数组只能存放10个 int类型的数值;
这里的int 表示的是 数组中只能用来存放int类型的数据;

1.数组的长度也就是中括号中的数可以是 常量、也可以是常量表达式如[4+3];

2.数组名的命名规范:严格按照标识符的命名规范;

3.数组名不能喝其他变量名同名:如 int a4;int a4[5];就会报错;

4.数组的长度不可以为一个变量 但是在xcode里面是可以的 因为xcode做了一个优化 在其他编译器里面不可以;

5.数组的长度可以使用 宏定义;(#define M 5)int a6[M] 这里m就是宏定义;

6.定义数组的时候,还可以定义普通变量;
例如:int x,y,a[5] 这里表示定义了两个整型变量x y ;又定义了一个长度为5的数组名为a的数组;

按维度分类:
一维数组:如果一个数组的所有元素都不是数组,那么该数组称为一维数组;
二维数组;
多维数组;

一维数组的初始化:就是给数组的每一个元素赋一个初始值;
数组的初始化方法:1.定义的同时进行初始化;例如 int a[3]={1,2,3};
                  假如定义时写成 int a2[]={23,22,44};就表示定义了一个数组,数组名为a2,数组的长度是根据后面大括号中赋值的个数来决定的,
                  所以我们知道大括号中应该是3也就是长度是3;
              
                  例如又写成int a4[10]={[3]=23,[8]=34};就表示它是部分赋值而且
                  这里面的[3]表示下标为3的元素赋初值23 [8]表示下标为8的元素赋初值34;

                  2.先定义数组,然后再初始化;例如:
                  int a5[4];
                  a5[0] = 12;表示给数组名为a5的数组的第一个元素赋值12;
                  a5[1] = 34;表示给数组名为a5的数组的第二个元素赋值34;下面的两个同理可以知道;

如果在数组中进行了部分初始化,没有初始化那部分的元素也自动被系统初始化为0了;
一个长度为n的数组,下标的范围:0-n-1;

特别强调:使用先定义后初始化的方式,如果部分数组元素被初始化了,系统不会对没有初始化的那部分的元素进行赋值0的操作;

数组的引用(访问):数组名[下标]就可以访问数组的元素;
例如:
int a[0]=12;
printf("%d",a[0]);这就算引用了或者说访问了这个数组的元素;

如果要访问数组的元素的话,这就叫数组的遍历;
通过for循环,可以访问数组的每一个元素;
int a[3]={98,78,89};
int i;
for(i = 0;i<3;i++){

printf("%d\t",a);//a[0] a[1] a[2]
}

例题:假设有数组 int a[10]={1,2,3,,4,5,6,7,8,,9,10}
1>正序输入各元素
2>倒序输出各元素
/* 倒序输出数组int a[10]={1,2,3,4,5,6,7,8,9,10}的各元素;
#include <stdio.h>
int main(){
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i;
for(i = 9;i>=0;i--){
printf("%d\t",a);//a[0] a[1] a[2]
}

  return 0;
}
*/

从键盘输入数组的长度,构建一个数组,然后再通过for循环从键盘接收数字给数组初始化,并使用for循环输出查看;
int len;
printf("请输入数组的长度:\n");
scanf("%d",&len);
int a[len];
for (int i=1;i<len;i++){
  printf("请输入数组的第%d个值:\n",i);
  scanf("%d",&a);
}

数组的存储方式:
1.计算机会给数组分配一块连续的存储空间;
2.数组名代表数组的首地址,从首地址位置,依次存入数组的第一个、第二个、。。。第n个元素;
3.每个元素占用相同的字节数(取决于数组类型例如整型都是占4个 字符型都是占1个);
4.并且数组中元素之间的地址是连续;

注意:数组名是代表了数组的首地址;
例如 :
//1.数组x和数组ca他们的地址是可以不连续的 如下例打出来就可以知道
int x[]={1,2};
char ca[5]={'a','B','C','D','E'};
printf("x =%p\n",x);//这里表示打印出数组x的首地址
printf("ca =%p\n"ca);//这里表示打印出数组ca的首地址
printf("x[0] =%p\n",x[0]);//打印数组x第一个元素的地址;
printf("ca[0] =%p\n",ca[0]);//打印数组ca第一个元素的地址;

数组名是一个常量:它存储数组的首地址。如果你用他等于一个数 就会报错  例如int a[]={1,2}
如果你让a = 1,就会报错;

数组每个元素的地址公式:
char chars[]={'a','b','c','d','e'};
//根据下标计算这个下标的地址:chars+sizeof(char)*下标(表示首地址加下标*类型的字节数)

数组的长度(就是中括号中间的数)=数组的的总长度(sizeof(数组名))/数组的任何一个元素在内存中占用的字节数(sizeof (数组类型如int));


4 个回复

正序浏览
帮我预习了!!!
回复 使用道具 举报
帮我预习了!!!
回复 使用道具 举报
谢谢整理
回复 使用道具 举报
加油加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马