C语言 数组 指针 初始化

liuchang910781261 2015-01-14 05:25:48
小弟最近在学习C语言,看别人代码,不知道以下2种方式有没有区别,恳请大神指教下~~~
uchar n=0;
uchar table[MAX]={0,0,0,0,0,0};
uchar Number;
uchar *ptr=table;
方式1:(*ptr++)=Number; 方式2:*(ptr+n++)=Number;
按我自己的理解,方式1自增,那么这个指针ptr后面就不能指向table了,使用方式2的 话,ptr始终指向table数组,不知道我的理解对不对?还有没有别的什么区别?我们常见一般是采取哪种方式呢?求拍醒~~~


...全文
294 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuchang910781261 2015-01-15
  • 打赏
  • 举报
回复
引用 5 楼 sprawling 的回复:
楼主理解的很对,就是这样子的, 方法2要多个变量,方法一更加简洁,很多时候,指针在迭代之后就没有用了。
哦,原来是这样的,感谢了~~~
liuchang910781261 2015-01-15
  • 打赏
  • 举报
回复
引用 3 楼 q3733353520 的回复:

#include  <stdio.h>

typedef unsigned char  uchar;

#define MAX 6

int main()
{
	uchar n=0;
	uchar table[MAX]={1,2,3,4,5,6};
	uchar Number;
	uchar *ptr=table;
	int i;

	for(i=0; i<MAX; i++)	
#if 0	
		printf("%d ", *ptr++);
#else
		printf("%d ", *ptr+n++);
#endif

	putchar(10);
}
为什么不自己写个小程序 测试下呢
大神说的很对~~~
sprawling 2015-01-14
  • 打赏
  • 举报
回复
楼主理解的很对,就是这样子的, 方法2要多个变量,方法一更加简洁,很多时候,指针在迭代之后就没有用了。
moonspot 2015-01-14
  • 打赏
  • 举报
回复
引用 楼主 liuchang910781261 的回复:
小弟最近在学习C语言,看别人代码,不知道以下2种方式有没有区别,恳请大神指教下~~~ uchar n=0; uchar table[MAX]={0,0,0,0,0,0}; uchar Number; uchar *ptr=table; 方式1:(*ptr++)=Number; 方式2:*(ptr+n++)=Number; 按我自己的理解,方式1自增,那么这个指针ptr后面就不能指向table了,使用方式2的 话,ptr始终指向table数组,不知道我的理解对不对?还有没有别的什么区别?我们常见一般是采取哪种方式呢?求拍醒~~~
方式1自增,它仍指向table,不过指向的是table数组的第2个元素。 方式2,没有影响ptr的值,它仍指向table数组的首地址。
  • 打赏
  • 举报
回复

#include  <stdio.h>

typedef unsigned char  uchar;

#define MAX 6

int main()
{
	uchar n=0;
	uchar table[MAX]={1,2,3,4,5,6};
	uchar Number;
	uchar *ptr=table;
	int i;

	for(i=0; i<MAX; i++)	
#if 0	
		printf("%d ", *ptr++);
#else
		printf("%d ", *ptr+n++);
#endif

	putchar(10);
}
为什么不自己写个小程序 测试下呢
liuchang910781261 2015-01-14
  • 打赏
  • 举报
回复
引用 1 楼 pengzhixi 的回复:
下标操作这么好的语法糖为什么不用
小弟最近在学习指针,所以希望能尽量最好使用指针写~
pengzhixi 2015-01-14
  • 打赏
  • 举报
回复
下标操作这么好的语法糖为什么不用

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧