C语言中的初始化问题

经常在C语言工程中,尤其是比较大的程序,运行过程中会出现由于内存或堆栈导致的各种问题,输出错误或运行崩溃~~

1.字符串数组的初始化
(1) char str[10]="";
(2) char str[10]={’\0’};
(3) char str[10]; str[0]=’\0’;

2.字符数组的初始化
int a[5] = { 0 };
错误:int a[5] = { 1 }; //只有第一个元素赋值为1,其他都为0.
遵循规则:数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。

如果想在数组创建结束后再对其进行初始化,可以使用C函数memset(),但是memset的使用有个大问题,就是它只对char类型的数组管用:
char a[10];
memset(a, 0, 10);
如果将上面的a数组换成int或其他类型的,就会出现问题,因为memset的内部实现是以字节为单位进行赋值的,int 类型(4字节)大于一个字节。

3. 指针的初始化
(1)一般用NULL或空指针常量,如:int *p = NULL;char *p = 0; 或 float p = 0;
(2)取一个对象的地址然后赋给一个指针,如:int i = 3; int ip = &i;
(3) 将一个指针常量赋给一个指针,如:long *p = (long *) 0x fffffff0;
(4)将一个T类型数组的名字赋给一个相同类型的指针,如:
char ary[100]; char *cp = ary;
(5)将一个指针的地址赋给一个指针,如:
int i = 3;int *ip = &i;int **pp = &ip;
(6) 将一个字符串常量赋给一个字符指针,如:char *cp = “abc”;

猜你喜欢

转载自blog.csdn.net/weixin_40414267/article/details/85994430