c trap里看到的一些东西
来源:互联网 发布:如何养淘宝小号 编辑:程序博客网 时间:2024/06/02 09:05
1.有关指针与数组的
a[i] 等价于 i[a]
因为对于数组来说,除了在sizeof()时,其他时候a相当于一个const指针,而所有对数组其他的操作都是基于a指针。
所以a[i]与i[a]一样都是a+i;
2.有关sizeof与strlen的
char b[2]={'a','b'};
那么 sizeof(b)=2;strlen(b)=x;因为这里似乎产生了溢出。
如果是 char b[20]={'a','b'};就没有这样的问题了,sizeof(b)=20*1=20,strlen(b)=2;
3.有关NULL与0
似乎有这么个说法,由0转换而来的指针绝对不能被解除应用。什么意思呢,就是说当0被赋予一个指针变量时,
绝对不能试图访问此指针指向的内存内容。
所以 strcmp(p,(char *)0);printf("%s",(char *)0);这样的语句是非法的。
这是c trap上讲的,但经过我的测试,似乎没什么问题,可能现在的编译器已经屏蔽了这个问题。
4.有关二维数组与指针的关系
涉及到函数指针或数组指针了,int calendar[12][31];可以定义一个指针指向该二维数组,你可以这样定义:int **p;
当然你也可以这样定义:int (*p)[31];但其实前者是错误的定义,显然前者指针的类型与实际不符合。
5.关于指针大小的问题
不论指针的类型是什么,指针本事的大小是固定的,具体是多少应该跟CPU有关系,即多少位机有关系,再具体点应该是跟
地址或数据总线有关系,32bit的应该是4B。
6.数组初始化列表的时候,末尾可以有多余的逗号。
不知道这是什么原因,按我的理解,逗号本事是不占内存的,它只是编译器用来区分数组内的元素的,比方说有一个数组
int a[10]={1,2,3,};编译器试图去了解这个数组有多少元素,1,然后碰到一个逗号,说明逗号前的这个1是其中的一个元素,
接着是2,然后同理,到最后一个逗号时,已经确定了3个元素,此时编译器继续往下寻找,但此时,后面已经没有其他的标识,所以
编译器理解为数据元素已经全部检查完毕,但此时如果又出现了一个逗号,即如果int a[10]={1,2,3,,};便会出现错误,因为它再一次
出现了一个逗号,本来逗号之前应该是数据元素的,但此时这个逗号之前还是逗号,所以这个逗号不应该出现在这里,同样,即使这个
逗号出现在1之前也是错误的。
姑且先这么猜着吧,估计肯定是错误的,要想彻底了解是怎么回事,可能还要看下编译原理的书。
7.关于返回值的一个说法。
struct A
{
int a;
char b;
}
main()
{
//...............
}
按书中所讲,似乎这个函数的返回值应该是struct A,这也可以理解,但我所用的编译器却似乎必须是int返回型,不知何解,
可能是便于OS接管,也可能是其他原因,这里不去深究。
8.关于字符串指针的问题。
char *p = "abcd";
char *q = p;
//q[1]='y';
printf("%s/n",q);
去掉注释后,编译通过,运行出现段错误。有2种解释,其一:ANSIC 禁止对string literal修改 其二:K&R C说对字符串常量的
修改行为是未定义的。不过仍然好像有编译器支持这种行为。
9.两个字符串合并的一个非常好的写法。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *myStrcat(char *,char *);
int main()
{
char *s = "abcd";
char *t = "efgh";
char *r = myStrcat(s,t);
printf("%s/n",r);
free(r);
return 0;
}
char *myStrcat(char *s,char *t)
{
char *r;
r = malloc(strlen(s)+strlen(t)+1);
if(!r)
{
printf("malloc error!/n");
}
strcpy(r,s);
strcat(r,t);
return r;
}
10.先到这里吧,饿了,吃饭去。
- c trap里看到的一些东西
- 微博上看到的一些东西
- 一些css的东西,看到,然后收集。。。
- 最近看到的一些python相关的技术东西
- 通宵看到的东西
- 一点看到的东西
- C语言的一些东西
- 在expert C上看到的一个好玩的东西
- 在mount里看到哪个设备文件的一些笔记
- Mark下看到的东西
- 社区里看到的
- C的一些格式的东西
- 广播里听到的一些蛮有意思的东西
- word和notepad里一些鲜见的东西
- 关于sprintf的一些东西(在stdio.h里)
- 网上看到的jsp操作excel和日期提醒的一些东西
- 从iOS开发者大会pdf看到的一些东西,跟大家分享
- 在CSDN上看到的一些好东西,分享一…
- 使用WinINet和WinHTTP实现Http访问
- 触发器的创建、修改、删除以及调用
- POJ 1087A Plug for UNIX
- Handler小例子(非常简单的handler例子,适合初学者,高手勿喷)
- 浅谈C#基本数字数据类型
- c trap里看到的一些东西
- Android联网操作总结
- 匈牙利法求二分图的最大匹配
- static_cast、dynamic_cast、reinterpret_cast、和const_c
- 使用API进行文件读写——CreateFile,ReadFile,WriteFile等
- spring security
- putty server 输入密码无法链接
- 心得
- int转string