C语言

在C语言中,凡不加返回值类型限定的函数,就会被编译器作为返回整型值处理。

定义const 是只读变量,具有不可变性。const 修饰的只读变量必须在定义的同时初始化。编译器通常不为普通const 只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作,使得它的效率也很高。

/*…*/这种形式的注释不能嵌套,如:
/*这是/*非法的*/*/
因为/*总是与离它最近的*/匹配。

注意:斜杠(/)和星号(*)之间没有空格,否则表示“除以”和“指针”。

int *p = NULL;
这时候我们可以通过编译器查看p 的值为0x00000000。这句代码的意思是:定义一个指针
变量p,其指向的内存里面保存的是int 类型的数据;在定义变量p 的同时把p 的值设置为
0x00000000,而不是把*p 的值设置为0x00000000。这个过程叫做初始化,是在编译的时候
进行的。

int *p;
*p = NULL;
同样,我们可以在编译器上调试这两行代码。第一行代码,定义了一个指针变量p,其指向
的内存里面保存的是int 类型的数据;但是这时候变量p 本身的值是多少不得而知,也就是
说现在变量p 保存的有可能是一个非法的地址。第二行代码,给*p 赋值为NULL,即给p
指向的内存赋值为NULL;但是由于p 指向的内存可能是非法的,所以调试的时候编译器可
能会报告一个内存访问错误。这样的话,我们可以把上面的代码改写改写,使p 指向一块合
法的内存:
int i = 10;
int *p = &i;
*p = NULL;
在编译器上调试一下,我们发现p 指向的内存由原来的10 变为0 了;而p 本身的值, 即内
存地址并没有改变。
经过上面的分析,相信你已经明白它们之间的区别了。不过这里还有一个问题需要注
意,也就是这个NULL。初学者往往在这里犯错误。
注意NULL 就是NULL,它被宏定义为0:

 

 a 和&a 的区别

main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
对指针进行加1 操作,得到的是下一个元素的地址,而不是原有地址值直接加1。所以,
一个类型为T 的指针的移动,以sizeof(T) 为移动单位
。因此,对上题来说,a 是一个一
维数组,数组中有5 个元素; ptr 是一个int 型的指针。
&a + 1: 取数组a 的首地址,该地址的值加上sizeof(a) 的值,即&a + 5*sizeof(int),也
就是下一个数组的首地址
,显然当前指针已经越过了数组的界限。
(int *)(&a+1): 则是把上一步计算出来的地址,强制转换为int * 类型,赋值给ptr。
*(a+1): a,&a 的值是一样的,但意思不一样,a 是数组首元素的首地址,也就是a[0]的
首地址,&a 是数组的首地址,a+1 是数组下一元素的首地址,即a[1]的首地址,而&a+1 是下一
个数组的首地址。所以*(a+1)输出2,而*(&a+1)输出a[5]数组里的值(当然这里已经越界了)。
*(ptr-1): 因为ptr 是指向a[5],并且ptr 是int * 类型,所以*(ptr-1) 是指向a[4] ,
输出5。

 指针数组和数组指针

 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身
决定。它是“储存指针的数组”的简称。数组名为p1,int *修饰的是数组的内容。

数组指针:首先它是一个指针,它指向一个数组。是“指向数组的指针”的简称。数组在这里并没有名字,是个匿名数组。int 修饰的是数组的内容,

 

exit()就是退出,传入的参数是程序退出时的状态码。

0表示正常退出,其他表示非正常退出,一般都用-1或者1,

exit(1);//跟return(1)一样效果;

标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_SUCCESS),可读性比较好一点。

使用exit()时,可以不论main()的返回值类型。

它的头文件是 stdlib.h。

用exit退出后,可以查看程序退出的状态。

程序执行完后用echo   $?   看退出状态。

exit(0)   为0;
exit(1)   为1;

continue   是跳出出本次循环,继续下一次循环。
break   是跳出循环。不再执行该循环。

exit(0)   及   exit(1)     對程式的結束並無影響,  
其不同處在於,  
exit(0)   會在程式結束後傳回   0     到   DOS   .  
exit(1)     會在程式結束後傳回   1     到   DOS   .  
當然...   不只如此,   也可以寫成   exit(10),   exit(1000)   等等..  

所以不能說   exit(0)   就是程式正常結束,   exit(1)   是不正常結束,  
這只是大家習慣用法而已,   不是一定的~  


程式結束後傳給   dos   的值,   可以使用   bat   檔來讀取,  
判斷程式是否正確執行...  
如果沒記錯,   是使用   errorlevel   指令來判斷..


continue只是直接执行下一次循环,其循环内部continue后面语句不执行。
而break则是跳出该循环,执行该循环后面的程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值