2
回答
一个C语言二级指针的问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

我是新手,最近才着手学习C,遇到了一个二级指针的问题,:

int main( void ){
        int **zz = 1;
	 
	 int *x = 1;
	 int **y = &x;	 
	 	 
	 printf( "zz: %d\n", zz  );
	 printf( "&zz: %d\n", &zz );
	 printf( "*zz: %d\n", *zz );//这里运行时会报段错误
	 
	 printf( "y: %d\n", y );
	 printf( "&y:%d\n", &y );
	 printf( "*y:%d\n", *y );//这里却不报错
        return 0; 
}
不知道上面两种定义赋值方法有什么本质区别,
int **zz = 1;//不知这句话包含了多少地址的分配,希望大神们指教,先谢谢了

GCC
举报
dongyado
发帖于5年前 2回/262阅
共有2个答案 最后回答: 5年前
int **zz = 1;

这个的作用是声明一个指向指针的指针,因此zz是一个指针,系统自动分配一个指针长度的空间,并把值设为1。所以zz就是1啦,&zz就是这个指针的地址,而*zz表示zz指向的那个指针的值,而那个指针的空间还没有分配,所以出现段错误。

对于*y,因为**y=&x,就是说y指向x的指针,因此*y就是x的值,x就是1,所以不报错。

我的看法,仅供参考。

引用来自“SErHo”的答案

int **zz = 1;

这个的作用是声明一个指向指针的指针,因此zz是一个指针,系统自动分配一个指针长度的空间,并把值设为1。所以zz就是1啦,&zz就是这个指针的地址,而*zz表示zz指向的那个指针的值,而那个指针的空间还没有分配,所以出现段错误。

对于*y,因为**y=&x,就是说y指向x的指针,因此*y就是x的值,x就是1,所以不报错。

我的看法,仅供参考。

嗯,我想了下应该就是这样,二重指针有时就不好理解,不过**zz=1是不是做了类型转换,是把整形1的地址传给了**zz,所以zz的值是1?

--- 共有 1 条评论 ---
SErHozz是一个指针类型的数,*zz=1是把zz的值设为1,也就是说zz指向的地址是1。 5年前 回复
顶部