黑马程序员 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>、期待与您交流! ----------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值