关于C、C++初始化
来源:互联网 发布:淘宝上的杰克琼斯 编辑:程序博客网 时间:2024/06/05 17:32
1、使用函数进行初始化
首先要给大家介绍一个初始化函数:
void *memset(void *s, int ch, size_t n)
将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。在使用之前,C中引入string.h,而C++中引入cstring
(1)初始化整数数组
const int N=10000; int f[N]; memset(f,255,sizeof(f));// 将f的前1000*4个字节初始化为255,二进制为1111-1111。表示的值为-1,连续取4个字节的值时同样为-1. printf("%d\n",sizeof(f));//40000个字节,说明每个整数占用4个字节.将每个字节初始化为255 printf("%d %d",f[0],f[1]);// 打印结果全部为-1
使用函数memset()进行初始化时,有很多人犯如下错误:
int p[100];memset(p,100,sizeof(p));想使用如上代码将数数组初始化为100,这是不可能的。它只是将每个字节表示为100,而后连续取出4个字节,这个数就非常大了。
(2)初始化bool类型数组
bool b[100];memset(b,0,sizeof(b));//就是初始化为false
(3)二维数组的初始化
char data[10][10];memset(data, '#', sizeof(data));
将所有的字符初始化为'#'
(4)结构体初始化
struct node{ int x,y; int p[5];}nn[100];int main(){ printf("%d\n",sizeof(nn));//2800 memset(nn,0,sizeof(nn)); printf("x=%d,y=%d,p[0]=%d",nn[0].x,nn[0].y,nn[0].p[0]);//0 return 0;}
2、指定初始值
char str[10] = {0}; if(str[0]==NULL) printf("Yes\n"); if(str[0]=='\0') printf("Yes\n"); printf("%d",str[0]);
输出结果为:Yes Yes 0。所以这里10个元素会被赋值为 null 字符(空字符),这个就是指'\0'。直接打印str[0]的值会发现,显示的就是空字符,啥也没有,但强制转换后你会发现它的ASCII码值为0,它占一个字节,其中8位全为0。
再来看一个例子:
int main(){ char str1[10] = {0}; char str2[] = {'\0', '\0', '\0'}; int len1 = strlen(str1);//0 int len = strlen(str2);//0 char a = '\0'; printf("len=%d;len1=%d,a=%c\n",len,len1,a);输出为0,0,空 return 0;}char a = '\0'; //赋值为休止符,打印出来空,什么都没有,但会占一个字符的位置,而且它不是空格,因为ASCII值为0,不是32。char str[] = {'\0', '\0', '\0'}; //定义数组,三个元素都是休止符,sizeof结果为3,但strlen的结果是0。char str1[10] = {0}; //这样的赋值实际上就是赋10个空字符,就是'\0', ASCII码为0
在操作字符数组时对以下几种情况进行区分:
char str[100];// 声明不指定初始值,这时候里面的为随机数str[0]=='0' // 数组的第一个数为0字符str[i]==0 // 字符串结束str[i]==' ' // 空格
弄清如上的问题后接着往下看:
char str[10]; strcpy(str,0123456789);//由于字符串的末尾还有一个'\0'字符,因此它的实际长度应该为11
如上的代码将出现错误,这也是人们常犯的一个错误。
int main(){ int a[]={0}; int b[10]={1,2,3}; printf("%d\n",b[8]);//结果为0 printf("a的数组长度为:%d\n",sizeof(a)/4); //结果为1 printf("%d\n",b[8]);//结果为0 return 0;}
总结一下:
1 指定的初始化数值不能比数组的元素多,但可以少
2 如果少,则列表中的初值被分配给从第一个元素开始的连续元素,那些没有的到初值的元素被初始化为0---明确地说是ASCII值为0
3 如果根本没有提供初始化列表,则情况不是这样的,数组将包含的是无用的数据,即内存中本来的值
- 关于C、C++初始化
- 关于C初始化内存
- C++:关于初始化
- 【C/C++】指针初始化
- C/C++--初始化列表
- C++,编译初始化,运行初始化
- c的关于数组初始化 和 memset用法
- 关于C语言中的未初始化变量的值
- 关于c / c++ 数组的初始化【2013.11.8】
- 关于C语言中的未初始化变量的值
- 关于C语言中的未初始化变量的值
- 关于C语言中的未初始化变量的值
- 关于C语言中的未初始化变量的值
- 关于C语言字符串初始化问题的探讨
- 关于C未初始化全局变量的连接问题
- c的关于数组初始化 和 memset用法
- 关于c语言中double指针的初始化问题
- C++/C 数组初始化问题
- libmemcached的调试
- 并发编程之倒计数闭锁CountDownLatch
- openstack 如何不用img 像VMware一样 直接使用 iso
- 组件与事件处理的监视器
- 解决Android与服务器交互大容量数据问题
- 关于C、C++初始化
- memcached的安装方法
- Android学习笔记(五) 之android tabwidget 调整高度文字居中
- 广州传智播客分享:零基础能学好PHP吗?
- Oracle应用专题之:分析函数3(Top/Bottom N、First/Last、NTile)
- QT QTableWidget 用法总结
- 百度地图 将获取到的maker在地图内全显示
- Tcpdump的用法及使用案例
- db2排错