---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、
<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
C语言一些常见的注意3
1、(C语言字符串)C中是没有string类型的,它是用字符数组来表示字符串,定义格式是这样的:
char string[大小];字符串以’\0’字符(ASCII值为0)结尾,所以这样定义的字符数组不是字符串:
char a[] = {‘i’,’t’};因为它不是以’\0’结尾,但这样是char a[] = “it”;,当在使用%s输出上面的数组a
时可能会错,因为它会在内存中找到\0来结束。
2、printf默认情况下参数是常量字符串,若不是常量则会警告,但不会报错。
3、strlen()函数是求字符串的长度,但是注意它求得是长度是按字节长度来计算,并且长度到’\0’为止。
4、(C语言指针)指针变量只能存放地址,如:int *p; p = 20 ;这种写法是错的
注意int *p =xxx 和 *p = xxx 是不同的意思,前者只是定义了一个整型的指针变量,并且将xxx的地
址给p,后者的意思是访问p所指向的地址空间并将该空间里面内容换成xxx。例如:
int *p; // 定义一个整型的指针
int a = 10; // 现有一个变量a,假设它在内存的中地址是ffc1
p = a; // 该语句执行之后p的值为a 地址即:ffc1
*p = 15; // *p就表示访问ffc1这个地址所属的空间,该语句ffc1空间为15
//也就是说可以通过两个变量(a和*p)访问15(ffc1地址空间内容)
5、对于未初始化的指针变量,我不能用来作为间接访问。如:
int *p;
printf(“%d”, *p); // 这样写是错误的
6、指向指针的指针,它的重点是一个指针,说明他存放的是一个地址,只不过它存放
的是指针的地址如:
int a = 13; // 假设有个变量a,地址为fff1
int *p = &a; // 有个指针p(一级指针)存放又变量a的地址
int **pp = &p; // 指针的指针中存放指针p的地址
分析:此时pp==&p当我们要访问&p地址所属的空间时即 *pp==p(&a) 同样的要想*pp
中存放的地址所指向的空间 *(*pp) ==*p(a),所以当*pp =14时,a 的值也跟着改,
说明fff1这个地址空间可以通过三个变量访问(a、*p、*pp)
7、要想一个函数返回多个值,我们可以通过指针来时实现
8、如果用指针变量指向与之不同类型的变量的地址,得到的值会出错,如:
int a = 2; // 在内存中分配4个字节
char b = 1; // 在内存中分配1个字节
int *p = &b; // 本来在内存中占一个字节的b却用了4个字节的指针p
printf(“%d”, *p); // 输出的*p按理说应该是1,但实际上不是它是513,内存泄露
9、各种格式说明符:int (%d)、flout/double(%f)、char(%c)、char *(%s)、long(%ld)、
longlong(%lld)、unsigned long(%zd)。
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、
<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------