一维数组、指针、字符数组、字符函数
来源:互联网 发布:微信内置浏览器js跳转 编辑:程序博客网 时间:2024/06/07 06:54
一、一维数组
1、未被"初始化列表"指定的数组剩余元素,系统自动把整型初始化为0,字符型初始化为'\0',指针初始化为NULL
二、数组名含义
1、数组名表示整个数组,如下:
(1)在定义数组的同一个寒暑假中,求sizeof(arr)
(2)&arr+1,则加整个数组大小
2、其它情况一维数组的数组名都表示数组首元素的地址
三、指针
1、int *p; //整型指针变量 指针 == 地址
int *p = &a; // 保存整型地址的值 p和a建立关系
* //说明在其后的变量为指针型;*在定义时使用,在使用时不写;当使用时*不写,如:p = &b;
2、p &p *p 指针型变量
a &a 普通变量
3、int a = 100;
int b = 200;
int *p = &a; //定义p为指针型变量,p与a建立联系
*p = 100; //解引用 a = 100;
p = &b; //p与b建立联系
*p = 1000; //解引用,b = 1000;
int **pp = &p; //定义*pp为指针型变量,*pp与p建立联系
*pp = &a; //解一次引用,让*pp保存a的地址
**pp = 2000; //a = 2000;
*pp = &b; //保存b的地址
**pp = 3000; //b = 3000;
4、野指针/悬挂指针:用户没有访问权限;编译器没有办法预防野指针
5、int *tmp = p1; //true
int *tmp;
*tmp = *p1; //erro 不允许解引用,崩溃
规律:子函数的改变要想影响到父函数:(1)传指针;(2)解引用(1与2是必要不充分条件)
6、 p = NULL; //NULL是无效指针
四、字符数组
1、初始化
局部变量若没有初始化,值为随机值
若没初始化,可能出现诡异的值:烫烫烫(CCCC) 屯屯屯(CDCD)
2、表示方法
char brr[10] = {'a','b','c','d'};
char crr[10] = {"abcd"};
char drr[10] = "abcd"; //字符串 一定包含‘\0’,也只有包含'\0'才能称为字符串
char frr[4] = {'a','b','c','d'}; //不是字符串,因为没有‘\0’
char hrr[5] = {'a','b','c','d'}; //是字符串 有'\0'
char类型:它的对象的字面值表现被一对单引号包围的单个字符。
五、字符函数
str2 = str1; //erro 数组不能整体赋值,而要单个赋值
六、一些小知识
1、a = 50; //左值 写权限
b = a; //右值 读权限
2、&a //取a的地址,取地址符为单目运算符
3、位:"位(bit)"是电子计算机中最小的数据单位。每一位的状态只能是0或1。
字节:8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。
4、1B(字节) = 8bites
5、2^10B = 1k; 2^20B = 1M; 2^30B = 1G; 2^32B = 4G
CPU OS(operating system) VS(编译器)
64bites 32/64bites 32/64biites
32bites的平台————2^32 = 4G的内存(VS)
考 32bites的平台有多少个字节的地址? 32/8 = 4B
64bites的平台有多少个字节的地址? 64/8 = 8B
6、求数组长度的标准公式:sizeof(arr)/sizeof(arr[0]) 不能写在子函数中 见代码4
sizeof(arr)/sizeof(int)————这个表示不好,若是double还得将int改为double
7、sizeof(int *) sizeof(char *) sizeof(double *) sizeof(int ****)
*只是表示地址,所以在32bites的平台上以上都是4个字节
8、不使用临时变量交换a,b的值,怎么交换?(腾讯笔试)
点击打开链接
七、代码
void Mystrcpy(char *des,char *src)//1
{
int i;
for(i=0;src[i]!='\0';i++)
{
des[i] = src[i];
}
des[i] = '\0';
}
int main()
{
char str1[] = "abcde";
char str2[6] = "xyz";
char str3[100] = "haha";
Mystrcpy(str2,str1);
printf("%s\n",str2);
//str2 = str1; //复制
//str3 += str1;//将新串链接到原串的后面
//str1 < str2 //比较大小
}
void Fun(int *p)
{
p = NULL;
}
{
int a = 10;
int *p = &a;
//p = NULL;//NULL 是无效指针
Fun(p);//目的:同上 p=NULL;一样的效果。todo 问题:1,为什么不可以;2、如果想要一样该怎么改
printf("%d,%d\n",p,*p);//0
}
{
int tmp = a;
a = b;
b = tmp;
//printf("%d,%d\n",a,b);
}
{
int *tmp = p1;
p1 = p2;
p2 = tmp;
}
{
int *tmp;//野指针,悬挂指针,没有访问权限
*tmp = *p1;//崩溃
*p1 = *p2;
*p2 = *tmp;
}
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
{
int a = 10;
int b = 20;
printf("%d,%d\n",a,b);
/*int tmp = a;
a = b;
b = tmp;*/
//Swap(a,b);
Swap(&a,&b);
printf("%d,%d\n",a,b);
}
void Show(int *arr,int len)
{
//for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)//error
for(int i=0;i<len;i++)
{
printf("%d ",arr[i]);
}
}
{
int arr[10] = {};//初始化部分内容,剩余为0
//for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
//{
// printf("%d ",arr[i]);
//}
Show(arr,sizeof(arr)/sizeof(arr[0]));
}
- 一维数组、指针、字符数组、字符函数
- 字符数组,字符指针
- 字符数组,字符指针
- 字符数组,字符指针
- 字符数组字符指针
- 字符数组,字符指针
- 字符,字符数组,字符指针
- 一维数组,字符数组
- 指针 指向一维数组 二维数组 字符数组 返回值为地址 指向函数的指针 指针数组 常量指针
- 一维数组、数组排序、字符数组
- 字符指针和字符数组
- 字符数组VS字符指针
- 字符指针和字符数组
- 字符数组VS字符指针
- 字符数组VS字符指针
- 字符数组VS字符指针
- 字符数组VS字符指针
- 字符数组VS字符指针
- struts2框架通过拦截器对表单重复提交处理
- STL算法汇总
- Python基础语法之——继承
- MySQL-MMM高可用集群搭建(可用)
- Android手机文件及文件夹目录详解
- 一维数组、指针、字符数组、字符函数
- InnoDB存储引擎B+树索引介绍
- CART构建与剪枝
- IP地址分类/IP地址10开头和172开头和192开头的区别/判断是否同一网段(A、B、C三类地址)
- Java:两个乒乓球队进行比赛,各出三人。甲队为A、B、C三人,乙队为X、Y、Z 三人,已经抽签决定了比赛名单。已知A 不和X 比,C 不和X、Z 比,请问比赛名单是什么。
- 机器人繁殖--第六届蓝桥杯国赛 C语言 C组第四题
- C++中对sprintf()函数的介绍
- RN踩坑记录(二)
- Power Network