选择java 进入自由开放的国度

随笔 - 49, 文章 - 3, 评论 - 154, 引用 - 1
数据加载中……

C中传地址和传指针比较

下面是在linux下察看文件大小的代码,比较了C中传地址和传指针的用法,并指出了不同点和使用指针时的注意事项.

传地址:
 1 #include <stdio.h>
 2 #include <sys/stat.h>
 3 
 4 int main()
 5 {
 6   char * filename = "/etc/passwd";
 7   
 8   struct stat infobuf1;
 9   if (stat("/etc/passwd"&infobuf) == -1)  
10        perror(filename);       
11   else
12   {
13       printf("The size of %s is %d\n", filename,  infobuf.st_size);    
14   }
15   
16   return 0;
17 }
18 
必需使用地址符&,在引用结构体内的元素时使用.运算符.

传指针:
 1 #include <stdio.h>
 2 #include <sys/stat.h>
 3 
 4 int main()
 5 {
 6   char * filename = "/etc/passwd";
 7   
 8   struct stat infobuf1;
 9   struct stat * infobuf = &infobuf1;
10   
11   if(stat(filename, infobuf) == -1)
12        perror(filename);       
13   else
14   {      
15     printf("The size of %s is %d\n", filename,  infobuf->st_size);
16   }
17   
18   return 0;
19 }
20 
在第9行声明指针后,必需要进行初始化,否则在linux下,被初始化为一个随机的地址,在第11行对其操作时酒会发声错误(在linux下提示"段错误").在第15行,引用结构体内的元素时,使用地址运算符->,或者使用(*infobuf).st_size.

总结:
    1、指针引用前必需初始化,初始化最简单的办法就是声明一个同类型的变量,因为变量会被初始化,会被分配内存空间,所以指针就有指的地方了。如:传指针程序段中的第8,9行。
    2、理解传地址和传指针的区别。不管怎么说都是要一个地址,譬如在函数stat(char * filename, struct stat * buf), 对于buf传入时必须是一个地址,不管是指针或是一个变量的地址,归根都是一样的,都是内存中的同一块区域。
    3、对于函数声明为stat(char &filename, struct stat &buf)的形式,传入时就不能是地址或者指针,而必需是变量了。

posted on 2006-03-27 08:28 soochow_hhb 以java论成败 以架构论英雄 阅读(1123) 评论(0)  编辑  收藏 所属分类: Reading


只有注册用户登录后才能发表评论。


网站导航: