------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、字符串的初始化,字符串必须以"\0"结尾,"\0"的ASCII码值为0,例如:
char name[] = "jack"; // "jack" == ‘j‘+‘a‘+‘c‘+‘k‘+‘\0‘ // 都是字符串 char name[8] = "it"; char name2[8] = {‘i‘, ‘t‘, ‘\0‘}; char name3[8] = {‘i‘, ‘t‘, 0}; char name4[8] = {‘i‘, ‘t‘}; // 不算是一个字符串(只能说是一个字符数组) char name5[] = {‘i‘, ‘t‘};
2、‘\0‘的作用
1.字符串结束的标记
2.printf("%s", name2);
会从name2这个地址开始输出字符,直到遇到\0为止。
3、strlen函数:计算字符串长度
1.计算的是字符数,并不是字数。一个汉字算作3个字符
2.计算的字符不包括\0
3.从某个地址开始数字符的个数,直到遇到\0为止
4、指针变量的定义
格式:变量类型 *变量名;
int *p定义了一个指向整型变量的指针变量p
指针变量只能存储地址
指针就一个作用:能够根据一个地址值,访问对应的存储空间
指针变量p前面的int:指针变量p只能指向int类型的数据
任何指针都占用8个字节的存储空间
5、指针变量的使用注意
指针变量只能存储地址(地址一般以十六进制的形式表示)
指针变量未经过初始化,不要拿来间接访问其他存储空间
定义变量时的*仅仅是一个象征,没有其他特殊含义
*p = 20,这个时候的*的作用:访问指向变量p指向的存储空间
6、指向指针的指针
int a = 10; int *p = &a; int **pp = &p; // (*pp) == p // *(*pp) == *p == a // **pp == *p == a
7、清空指针——P = NULL;
8、输出格式总结
%d int
%f float\double
%ld long
%lld long long
%c char
%s 字符串
%zd unsigned long
9、数组与指针
1.数组元素的访问方式
1> 数组名[下标] ages[i]
2> 指针变量名[下标] p[i]
3> *(p + i)
2.指针变量+1,地址值究竟加多少,取决于指针的类型
int * +4
char * +1
double * +8
3.利用一个指针来接收一个数组,指针变量p指向了数组的首元素,数组名就是数组的地址,也是数组首元素的地址
例如:
int array[5] = {10, 9, 8, 67, 56}; int *p; p = ages; // p = &ages[0]
掌握:
定义字符串的2种方式
1> 利用数组
char name[] = "itcast";
* 特点:字符串里面的字符是可以修改的
* 使用场合:字符串的内容需要经常修改
2> 利用指针
char *name = "itcast";
* 特点:字符串其实是一个常量字符串,里面的字符是不能修改
* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
总结:
一、指针变量的定义
1. 格式:变量类型 *指针变量名;
2. 举例:int *p; char *p2;
3. 注意:定义变量时的*仅仅是指针变量的象征
二、利用指针变量简单修改其他变量的值
1.指向某个变量
int a; int *p; p = &a;
或者
int a; int *p = &a;
2.修改所指向变量的值
*p = 10;
3.在函数内部修改外面变量的值
int a = 10; change(&a); void change(int *n) { *n = 20; }
三、指针与数组
1.将数组当做函数参数传入时,会自动转为指针
四、指针与字符串
1.定义字符串的2种方式
1> 利用数组
char name[] = "itcast";
* 特点:字符串里面的字符是可以修改的
* 使用场合:字符串的内容需要经常修改
2> 利用指针
char *name = "itcast";
* 特点:字符串其实是一个常量字符串,里面的字符是不能修改
* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
2.定义字符串数组
1> 利用二维字符数组
char names[2][10] = {"jack", "rose"};
2> 利用指针数组
char *names[2] = {"jack", "rose"};
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------