概述
1. 获取变量地址的方法
1)输出地址用%p
例如 int=b;
Printf(“%p”,&b);
2)注意:计算机分配内寻到额时候,从高地址向低地止分配,先定义的变量,分配的是高地址,后定义的变量是低地址。
地址分配的时候 不一定是连续的。
3)变量存储细节:低字节存储在低地址高字节存储在高地址
4)变量的地址:变量的首地址(变量在内存中占用的存储单元最小的地址),具体如下图:
C语言第八天知识点:
1.Char 型常量的存储问题
Sizeof(‘ a ’);
-------->先找到‘a ’的ascii码值 97
-------->把97按照int类型进行存储
-------->把四个字节存储到内存中
Char=‘a’
---------->97
-----------?把97转换为2进制以字符进行存储
----------->把一个字 节存储到内存中
2. 数组:一组具有相同数据类型的数据的有序的集合。
1)数组元素:构成数组的数据。
2)数组的下标:是数组元素的位置的一个索引指示。
3)按存储类型分类:
数值数组:用来存放数值
字符数组:用来存放字符
指针数组:用来存放数据的指针
结构数组:用来存放结构类型的数据
4)按维度分类:
一维数组、二维数组、三维数组
5)数组作为参数
1.数组元素作为实参使用
2.数组名作为函数的形参或实参使用
一维数组定义:数组的每个元素都不是一个数组
一维数组格式:类型说明符 数组名 [数组长度];
例:int a[3]
6) Int 表示的是数组用来存放int类型的数据 不要理解成a是int类型
注意:
1)数组的长度可以是一个常量,也可以是常量表达式
2)数组名的命名规则严格按照标识符的命名规范
3)数组名不能和其他变量同名
4)数组的长度不可以是一个变量
5)数组的长度可以使用宏定义 例 #define m 3 int a[m]
7)数组的初始化方法:
1)定义的同时进行初始化
(1)定义的同时进行全部初始化
(2)定义的同时进行部分的初始化未初始化部分被系统初始化为零
2)先定义,后初始化
注意:如果使用先定义后初始化的方式,如果部分数组元素被初始化,系统不会对没有定义的数组元素进行赋值为零。
3. 数组的存储方式
1)计算机会给数组分配一块连续的存储空间
2)数组名代表数组的首地址,从首地址位置,依次存入数组的第一个,第二个。——
3)每个元素占用相同的字节数
4)元素间的地址是连续的且从低到高存储
5)数组之间的地址不一定连续且先定义的数组分配在高地址
6)数组名是一个常量代表数组的首地址
4. 数组长度的计算
Int a[5];
Int len;
Len=sizeof(a); 表示数组a所占用的总字节数。
则len=5*sizeof(a[0]);
Sizeof(a[0])表示每个int类型的数组元素所占用的字节数。
5. 数组名做参数
1)数组名做实参时,形参也必须是相同类型的数组。
2)数组名做实参传递到形参时。实参与形参之间不是值传递而是地址传递。实参数组名将该数组的起始地址传递到形参数组。切实参与形参数组地址指向同一地址空间。
3)数组元素作实参传递到形参时,实参与形参之间是值传递。
C语言第九天知识点总结:
1.冒泡排序:
实现:双层循环:外层循环 表示循环的趟数 i<len-1;里层循环表示比较的次数j<len-1-i。实现代码如下:
<pre name="code" class="vb">
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[10];
printf("请输入10个数字:n");
for (int i=0;i<10;i++) {
scanf("%d",&a[i]);
printf("n");
}
for (int j=0;j<9;j++) {
for (int i=0; i<9-j; i++) {
if (a[i]>a[i+1]){
int temp =a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
printf("排序后的10个数字为:n");
for (int i=0; i<10; i++) {
printf("%dt",a[i]);
}
return 0;
}
2.选择排序:是一种简单直观的排序算法。原理:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,在从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。依次类推,直到所有元素均排序完毕。实现:双层循环:外层循8环 表示循环的趟数 i<len-1 里层循环 找出最小数 j=i+1 ;j<len。实现代码如下:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[10];
int i,j;
printf("请输入10个数字:n");
for (int i=0;i<10;i++) {
scanf("%d",&a[i]);
printf("n");
}
for (j=0; j<9; j++) {
for (i=0;i<9; i++) {
if(a[j]>a[i+1])
a[j]=a[i+1];
}
printf("排序后的10个数字为:n");
for (int j=0; j<10; j++) {
printf("%dt",a[j]);
}
}
return 0;
}
3. 折半查找:在有序的的表中,取中间元素作为比较对象,若给定值数与中间元素相等,则查找成功;若给定值小于中间元素的数,在中间元素的左半区继续查找。否则在右半区查找。实现代码如下:
<pre name="code" class="vb">#include <stdio.h>
int serchscore(int a[],int key,int len){
int low=0,high=len-1,mid;
mid=(low+high)/2;
while (low<high) {
{
if(key>a[mid]){
low=mid+1;
}else if(key<a[mid]){
high=mid-1;
}else
return mid;
}
return -1;
}
int main(int argc, const char * argv[]){
int a[10] = {12,23,32,34,38,45,52,55,60,128};
int low = serchscore(a,34,10);
printf("low=%d",low);
return 0;
}
4. 二维数组:可以看做一个特殊的一位数组,这个一维数组的每个元素又是一个一维数组。
1. 二维数组的定义:二维数组定义与一位数组定义类似,初始化注意事项: 1) 第一位长度可以省略,但是第二维的长度不可以省略; 2) 二维数组的存储方式 :数组的首地址==数组名=&[0]==&[0][0]
3) 格式:类型说明符 数组名[常量表达式1][常量表达式2];
2. 二维数组的存储
二维数组是按行存储的,在地址中的分配空间是连续的。
3. 注意:
1)数组名不能和变量名同名
2)数组的长度可以是常量表达式
3)Xcode特有:int m=2,n=2;
Int [n][m]; //其他编译器可能没有
4)二维数组中第一维可以省略
C语言第十天知识点总结:
1 %s从给定地址开始,一直输出字符,直到遇到 就停止了; 注意: 如果以%s 输出的话,注意空格问题,如果输入的字符串有空格,则空格之后的字符无法别接收。
2. 输入的字符串长度要小于数组长度。
3. C语言中字符串处理函数有: puts gets strlen strcpy strcmp strcat
4. 指针变量的注意事项: 1 1)必须有* 2)指针变量,归根结底还是变量,3) 指针变量不能存放数值或字符。 2 “ * ”的两种用法 1)用于定义,一个指针变量; 2)给指针变量指向的内存空间的内容。 3) 存储指针变量指向的存储空间内容。
C语言第十一天知识点总结:
1.一维数组指针 注意:(1)数组名不代表整个数组,只代表数组的首元素的地址(是一个常量,若数组名++,是不对的)。(2) “P=a”,的作用是“把a 数组的首元素地址付给指针变量 P”,而不是把数组a各个元素的值付给P。2. 一维指针数组:一个数组元素值为指针则为指针数组, 格式为:类型说明符 *数组名[数组长度];应用:数组的逆序:
</pre><pre name="code" class="objc">#include <stdio.h>
void nixu(int *p,int len){
int *x,*i,*j,m=(len-1)/2,temp;
i=p;j=p+len-1;x=p+m;
for (;i<x; i++,j--) {
temp=*i;
*i=*j;
*j=temp;
}
}
int main(int argc, const char * argv[]) {
int i=0,a[10];
printf("请输入十个数字:以空格隔开n");
for (int i=0; i<10; i++) {
scanf("%d",&a[i]);
}
for (int i=0; i<10; i++) {
printf("您输入的十个数字是:%dn",a[i]);
}
nixu(a,10);
for (int i=0; i<10; i++) {
printf("%dt",a[i]);
}
return 0;
}
指针变量之间可以做减法运算,主要为了判断两个指针变量是否连续,或者判断两个指针变量之间相隔几个元素: 具体计算公式为:(地址1-地址2)/sizeof (所指向的数组)。
关系运算: 如果p1>p 运算结果为1,表示p1在高位,为0,表示p在高位。
3. 二维数组指针: 数组指针变量说明:
一般形式为:数据类型(*指针变量名)[二维数组列表];
二维数组的行指针和列指针:
4.字符串指针 格式为:char *变量名=”字符串内容”,(字符串内容是常量),作用是保存一个字符串。 *str=“abc” str 只是保存了字符串常量的首地址,是一个指针变量。字符串保存在常量区,在常量区保存的数据都只是可读的,不可以改变。
5.二维字符串数组的概念:
一维字符数组 char ch[10]={‘a’,’b’};或者 char ch[]=“abc’;
二维字符数组 char ch[3][10]={{‘a’,’b’},{‘b’},{‘c’}}; 或者 char ch3[3][10]={“abc”,”def”,”erf”};
字符串类型的指针数组 格式 char *name[3]={“abc”,”def”};
应用例题:字符串排序:
#include <stdio.h>
#include <strings.h>
void sort(char *name[],int n){
char
* temp;
for (int i=0; i<n-1; i++) {
for (int j=1; j<n; j++) {
if (strcmp(name[i], name[j])<0) {
temp=name[i];
name[i]=name[j];
name[j]=temp;
}
}
}
}
int main(int argc, const char * argv[]) {
char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Compter Design"};
int n=5;
sort(name, n);
for (int i=0; i<5; i++) {
printf("%sn",name[i]);
}
return 0;
}
6. 有关二维数组a的有关指针:
最后
以上就是大方汽车为你收集整理的黑马程序员-[C语言] 第二篇:数组、排序方法总结的全部内容,希望文章能够帮你解决黑马程序员-[C语言] 第二篇:数组、排序方法总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复