黑马程序员-C语言基础学习(五)
来源:互联网 发布:淘宝提交多个订单 编辑:程序博客网 时间:2024/05/16 19:32
---------------------- IOS培训.期待与您交流! ----------------------
C语言学习笔记五
---既然决定14年要好好的努力一次,那么就不要再轻言放弃,不再在随波逐流。只有努力过、拼搏过,才会知道自己行还是不行!为自己加油!---
---总结的知识点可能有不正确的地方,如果有发现请留言给我,我一定及时更正,不让错误的知识去误导大家,有好的意见也可大声提出来,小弟一定愿意采纳---
C语言的数据类型
1、分类基本数据类型 int double float char
构造类型 数组
数组的定义格式 类型 数组名[元素个数]; 如 int args[5]; 定义一个大小为5的整形数组
注意 C语言中不支持 int[] array 这样的定义形式
特殊赋值方式(把数组中某个值赋值) int a[5] = {[2] = 10, [4] = 2}; 把数组的的 2、4 元素赋值
int args[]; //错误 需要初始给定大小
int args[5]; args = {10,11,12,13,14}; //错误 只能在定义数组的同时进行初始化
int args['A'] = {10,11}; //正确 'A'字符常量 65
int args[count] = {10, 11, 13}; //如果想再定义数组同时进行初始化,数组元素个数必须是常量,或者不写
2、计算数组的长度
C语言非面向对象语言,所以计算数组的长度不能用 .length 这种面向对象的方法。
C语言计算数组长度方法 int count = sizeof(args) / sizeof(int);
先计算数组占内存的大小,在除以数组类型占内存的大小 就是数组的个数
3、数组在内存中存储顺序:
数组的第一个元素会存在被分配内存的低位置部分。由低到高,与其他类型的存储方式相反。
4、数组作为参数:
数组作为函数参数,可以省略元素个数。 int test(int ars[]);数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组。
数组当作函数参数传递时,会当作指针变量来使用,如果这时来计算数组的长度就会不准确,(指针变量在64bit编译器环境下占8字节)
所以在需要传递数组长度时,要在定义数组的位置先计算出来,在把长度当作参数传递过去。
5、C语言中的字符串
C语言中字符串用字符数组存储 没有JAva中的String 之说(字符串也就等价于字符串数组)(比较特殊,仔细想想)
字符串结束标识 \0 (ASCII码值为0)
以下四种均可当作字符串
char a[6] = "it";
char a[6] = {'i', 't', '\0'};
char a[6] = {'i', 't', 0};
char a[6] = {'i', 't'}; //指定了长度 后面省略0
这个不是字符串,只能说是一个字符数组 (注意这个和上面的区别,主要是没有指定长度)
char a[] = {'i', 't'};
字符串输出用%s(实质是按字符输出,遇到\0时结束)
6、strlen 函数:
计算字符串长度。 strlen函数声明在string.h文件中1). 计算的是字符数,并不是字数
2). 计算的字符不包括\0
3). 可以从某个地址开始数字符个数,遇到\0 就结束
int size = strlen("哈haha"); size = 7 哈 占用3字符
7、字符串数组(字符串也就等价于字符串数组)(比较特殊,仔细想想)
char names[2][10] = {"jack","rose"}; (二维数组)
实质
char names[2][10] = {'j','a','c','k'},{'r','o','s','e'};
printf("%s",names[0]); // jack
printg("%s",names[1]); // rose
printf("%c",names[0][3]) // k
8、指针(重点)
指针变量定义格式 变量类型 *变量名;
定义一个指针变量p int *p; (定义变量时的*仅仅是一个象征,没有其他特殊含义。)
指针变量只能存储地址
如 int *p; int a = 90; p = &a; 把变量a的地址给p。指针变量p指向了变量a
*p 访问指针变量p指向的存储空间 如上面例子,*p就是访问a的存储空间
指针就一个作用,能够根据一个地址值,访问对应的存储空间
指针变量p前面是int 表示 指针变量p只能指向int类型的数据
int *p; double d = 10.0; p = &d; //不建议这样写,int *p 只能指向int类型的数据
int *p; p = 200; // 指针变量只能存储地址
int *p; printf("%d\n", *p); //指针变量未经过初始化,不要拿来间接访问其他存储空间。
int *p; *p = &a; //不正确的写法,不需要&符。
*p = 20; 含义: 把指针变量p指向的存储空间的数值修改为20
9、指向指针的指针
int *p = &a; int **p1 = &p; // 指针类型 如 int * 把它再用指针指向他就是 (int *)* = int **
/**间接修改函数变量的值,已达到多个返回值的情况**/int sumAndMinus(int n1, int n2, int *n3);int main(){ int a = 9, b = 10; int sum , minus; sum = sumAndMinus(a, b, &minus); //将minus的地址作为参数传递 printf("%i,%i", sum, minus); return 0;}int sumAndMinus(int n1, int n2, int *n3){ *n3 = n1 - n2; //通过指针类型将外面参数的数值修改(指针变量去接收地址值) return n1 + n2;}
%d int
%f float\double
%ld long int
%lld long long int
%c char
%s 字符串
%zd unsigned long
任何指针都占用8个字节的存储空间。
int array[5] = {1,2,3,4,5};
int *p;
p = &array[0]; //指针变量p指向数组中第一个元素。
/*
p + 1 ----> &array[1]
注意 指针变量的加减是内存地址的加减,内存地址具体加多少与指针变量的类型有关 如 int 类型 每次地址值加 4字符
*/
int array[5] = {1,2,3,4,5}; int *p; p = array; //数组名就是数组的地址,也就是数组首元素的地址 所以不用 &
11、数组的访问方式:
int array[4];
int *p;
p = array;
1、数组名[下标] array[i]
2、指针变量名[下标] p[i]
3、*(p + i)
指针变量的+1究竟加多少,取决于指针的类型 int * 加4 char * 加1 double * 加8
12、存储位置:
常量区 存放一些常量字符串
堆 对象
栈 存放局部变量
13、指针与字符串
char *name = "it"; //字符串常量 常量字段不允许进行修改。 且name指向字符串的首字符。
1).定义字符串2种方式:
利用数组 char name[] = "itcast"; 特点 字符串里面字符可以修改
利用指针 char *name = "itcast"; 特点 字符串其实是一个常量字符串,里面的字符是不能修改的,被放到缓存中
2).指针数组(字符串数组):
char *name = {"jack", "rose"};
3).字符串输入:
char name[20];
scanf("%s", name);
4).返回指针函数
char *test(){ }; //返回char 类型指针的函数
5).指向函数的指针
void test(){printf("指向函数的指针")};
int main()
{
//(*p)是固定的写法,代表指针变量P将来肯定是指向函数
//左边的void 指针变量p指向的函数没有返回值
//右边的() 指针变量p指向的函数没有形参
void (*p) ();
//指针变量p指向了test函数
p = test;
//带用函数的方式 p代表的就是test
p();
(*p)(); //利用指针变量间接调用函数
test(); //直接调用函数
}
0 0
- 黑马程序员-C语言基础学习(五)
- 黑马程序员-OC语言基础学习(五)
- 黑马程序员--------------------------------------------C语言学习记录五
- 黑马程序员-iOS基础-C语言基础(五)指针
- 黑马程序员-C语言基础学习(一)
- 黑马程序员-C语言基础学习(二)
- 黑马程序员-C语言基础学习(三)
- 黑马程序员-C语言基础学习(四)
- 黑马程序员-C语言基础学习(六)
- 黑马程序员-c语言学习-基础语法
- 黑马程序员-C语言基础五:流程控制
- 黑马程序员-C语言学习日记(五)复杂类型
- 黑马程序员---C语言学习笔记之五
- [黑马程序员][C语言]基础
- 黑马程序员-C语言学习日记(一)基础语法
- 黑马程序员-2 ios学习历程 C语言基础回顾
- 黑马程序员-ios学习笔记 C语言基础语法
- 黑马程序员-IOS学习笔记-C语言基础选择结构
- 第三周项目3-时间类
- 两个数的最大公约数------欧几里德算法(辗转相除法)
- struts2入门2
- ASP.NET程序运行出现WebDev.WebServer40.exe已停止工作解决方法(netsh winsock reset)
- pip list Exception
- 黑马程序员-C语言基础学习(五)
- 23. 微软面试题:跳台阶问题
- 摄像头 由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备。 (代码 19)
- 2014Android开发热门资料(110个)
- 关于Linux 系统下 C++ 的多线程基类 Thread
- LeetCode :: Container With Most Water
- WPF ListBoxItem模板中添加CheckBox选中问题
- Linux上JDK、Eclipse的安装
- 网络视频监控P2P解决方案