LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: devel

感到C的指针格式好难记。

[复制链接]
发表于 2003-10-12 03:13:37 | 显示全部楼层
# cat t0.c
main()
{
int a=1;
int *p1=&a;
printf("%d\n",*p1);

int b=2,*p2;
p2=&b;
printf("%d",*p2);

int c=1,j=2,k,*p3=&c;
k=*p3+j;
printf ("%d",k);
}


  1.    p1                       *p1     
  2. +-------+        0xffff:  +-----+   
  3. |0xffff ------->    .    a|  1  |
  4. +-------+           .     +-----+
  5.                     .     |     |              *p2
  6.                  0xfff7:  +-----+           +-------+
  7.                          b|  2  | <---------- 0xfff7|
  8.                           +-----+           +-------+
  9.    p3                      *p3   
  10. +-------+        0xffef:  +-----+   
  11. |0xffef ------->    .    c|  1  |
  12. +-------+           .     +-----+
  13.                     .     |  2  | j  
  14.                  0xfff7:  +-----+
  15.                           |  3  | k = *p3 + j = 1+2 = 3


复制代码

 楼主| 发表于 2003-10-12 10:37:39 | 显示全部楼层
谢谢+感激大家的热心帮助。
我完全懂了。呵呵```
只是格式难记点,多用就能熟练了。
 楼主| 发表于 2003-10-13 10:15:37 | 显示全部楼层
昨天学到指针数组的例子了。
看下面的例子:
# cat fin1_array_one.c
main()
{ char s[3][5],*p[3];
int i;
for(i=0;i<3;i++)
   p=s;
for(i=0;i<3;i++)
   scanf("%s",p);
for(i=0;i<3;i++)
   printf("%s\n", p);
}
#
p=s;  和printf("%s\n", p);   
不是这样吗?
p=&s;    printf("%S\n",*p);

我真是迷糊了:ask :ask
发表于 2003-10-13 12:05:47 | 显示全部楼层
定义char s[3][5]之后,s实际就是一个指针了
指向s[0]--s[4]这段内存的首地址
所以p=s(两边都是指针),直接赋值
后面一个同理
 楼主| 发表于 2003-10-13 12:18:02 | 显示全部楼层
谢谢~~~~
仔细看了,原来p=s;是指向第 i 行的首地址。
不过 print("%d\n",p);不明白,因为通常的格式是 *p的。

我改成了print("%d\n",*p);    编译也能通过,就是运行时出现了错误。
# cat fin1_array_one.c
main()
{
char s[3][5],*p[3];
int i;
for(i=0;i<3;i++)
   p=s;
for(i=0;i<3;i++)
   scanf("%s",p);
for(i=0;i<3;i++)
   printf("%s\n",*p);
}                                                                                             
# gcc -o test fin1_array_one.c
# ./test
abc
qwe
dg
Segmentation fault (core dumped)
#
发表于 2004-6-2 01:06:46 | 显示全部楼层
改成这样可以吧:
printf("%c\n",*p);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表