黑马程序员 C语言一些常见的注意3

---------------------- <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>、期待与您交流! ----------------------


阅读更多
文章标签: c语言 内存 string
个人分类: C语言成长笔记
想对作者说点什么? 我来说一句

黑马程序员C语言入门笔记

2013年05月23日 51KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭