当前位置: 代码迷 >> C语言 >> Static 这个特殊的指针?
  详细解决方案

Static 这个特殊的指针?

热度:904   发布时间:2006-02-14 12:51:00.0
Static 这个特殊的指针?
#include "stdio.h"
main()
{
static int m[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
printf ("%d\t%d\t%d\t%d\t%d\t\n",m,*m,m[0],&m[0],&m[0][0]);
printf ("%d\t%d\t%d\t%d\t%d\t\n",m+1,*(m+1),m[1],&m[1],&m[1][0]);
printf ("%d\t%d\t%d\t%d\t%d\t\n",m+2,*(m+2),m[2],&m[2],&m[2][0]);
printf ("%d\t%d\t\n",m[1]+1,*(m+1)+1);
printf ("%d\t%d\t\n",*(m[1]+1),*(*(m+1)+1));
}


问题是 : 1 . static 是何东东
2 . 未指定指针. 为何输出还可以用 * (m+1) , 这种格式?
搜索更多相关的解决方案: 指针  Static  static  int  

----------------解决方案--------------------------------------------------------
1、scatic是将变量定义为静态变量
2、因为数组是用地址存储的, 要读其中的值必需要找到它的地址,*m=a[0][0] 等价
 

----------------解决方案--------------------------------------------------------
静态变量? 是一个什么概念? 我的书上没有.

int m=[4];
*m 这样就是读取m的地址了?
----------------解决方案--------------------------------------------------------

静态变量:无论变量是否调用都占存储单元,不释放变量的空间.而一般我们通常用的是动态变量(int a=3;)
静态变量是一个固定不变的值,如果我们定义成
static int a=3; 那么当这个程序执行完之后a这个变量还是在我们的存储单元存在。一般情况下不提倡使用静态变量,但是可以利用静态变量来改变值。
如:
int add(int x,int y)
{static int a=3;
a+=x+y;
return(a);
}
main()
{int a,b,c1,c2;
scanf("%d%d",&a,&b);
c1=add(a,b);
c2=add(a,b);
printf("c1=%d,c2=%d",c1,c2);
getch();
}
这段程序执行完之后c1,c2的值是不一样的,这段程序就能说明scatic的一个功能。我也不知道你看的谁的书,我看的谭浩强的书.
2、第二个问题你再好好看看书,我也是这几天才看到指针的,不好解释。


----------------解决方案--------------------------------------------------------

m 是数组名字,他也可以表示数组首地址

书上这个都不说的话 可以考虑换一本书 再看看


----------------解决方案--------------------------------------------------------
谢谢... 大概意思都明白了.

m是数组名,首地址,书上有讲.. 但是没讲 m可以直接用 *m 调用出来.

哪 *m = m[0][0] 对吧.
----------------解决方案--------------------------------------------------------

首地址里面放的是什么


----------------解决方案--------------------------------------------------------
以下是引用Fjcyz在2006-2-14 13:43:00的发言:
谢谢... 大概意思都明白了.

m是数组名,首地址,书上有讲.. 但是没讲 m可以直接用 *m 调用出来.

哪 *m = m[0][0] 对吧.  /*错,*m是指向m[0][0]单元的值,*表示指向,m才是存放m[0][0]的指针变量。*/


----------------解决方案--------------------------------------------------------

*m = m[0][0]

/*错,*m是指向m[0][0]单元的值,*表示指向,m才是存放m[0][0]的指针变量

m[0][0] 不就是值么?

m=&m[0][0] 应该是这样的吧?

----------------解决方案--------------------------------------------------------

以下是引用Fjcyz在2006-2-14 14:02:00的发言:

*m = m[0][0]

/*错,*m是指向m[0][0]单元的值,*表示指向,m才是存放m[0][0]的指针变量

m[0][0] 不就是值么?

m=&m[0][0] 应该是这样的吧? /*这样是对的*/

----------------解决方案--------------------------------------------------------
  相关解决方案