请问那个*(p+1)还有*(pt+2)有啥区别怎么做呢谢谢啦

不瘦100斤不改网名 2020-04-13 02:02:04
各位大佬帮帮忙
...全文
595 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2020-07-02
  • 打赏
  • 举报
回复
A[B]
*(A+B)
*(B+A)
B[A]
//以上四行等价

"abc"[1]
*("abc"+1)
*(1+"abc")
1["abc"]
//以上四行等价

A[0]
*(A)
0[A]
//以上三行等价
  • 打赏
  • 举报
回复
好滴好滴
  • 打赏
  • 举报
回复
引用 23 楼 5250的回复:
[quote=引用 20 楼 不许百姓点灯(^ω^) 的回复:][quote=引用 19 楼 5250的回复:]
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);

/*char *s[] 是一个指针数组,你也把它看作二维数组,数组每个成员都是一个指针(字符串),用char *p=s[1],即指针p指向指针数组的第2个成员的首地址,此时p指向第二个字符串"two"
* 指针指向数组的时候是指向数组的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一个成员,即one,所以第一个输出 w,one
*/

char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 这个题和上面一点点不同,pt是一个二级指针,二级指针和一级指针不同;一级指针保存的是一个字符的地址,比如上面的p保存的t的地址,而二级指针保存的是一个字符串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /

讲的好明白谢谢[/quote]

OK 有啥不明白的可以再问
[/quote] 嗯好嘞
  • 打赏
  • 举报
回复
引用 23 楼 5250的回复:
[quote=引用 20 楼 不许百姓点灯(^ω^) 的回复:][quote=引用 19 楼 5250的回复:]
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);

/*char *s[] 是一个指针数组,你也把它看作二维数组,数组每个成员都是一个指针(字符串),用char *p=s[1],即指针p指向指针数组的第2个成员的首地址,此时p指向第二个字符串"two"
* 指针指向数组的时候是指向数组的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一个成员,即one,所以第一个输出 w,one
*/

char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 这个题和上面一点点不同,pt是一个二级指针,二级指针和一级指针不同;一级指针保存的是一个字符的地址,比如上面的p保存的t的地址,而二级指针保存的是一个字符串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /

讲的好明白谢谢[/quote]

OK 有啥不明白的可以再问
[/quote] 嗯好滴
5250 2020-07-02
  • 打赏
  • 举报
回复
引用 20 楼 不许百姓点灯(^ω^) 的回复:
[quote=引用 19 楼 5250的回复:]
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);

/*char *s[] 是一个指针数组,你也把它看作二维数组,数组每个成员都是一个指针(字符串),用char *p=s[1],即指针p指向指针数组的第2个成员的首地址,此时p指向第二个字符串"two"
* 指针指向数组的时候是指向数组的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一个成员,即one,所以第一个输出 w,one
*/

char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 这个题和上面一点点不同,pt是一个二级指针,二级指针和一级指针不同;一级指针保存的是一个字符的地址,比如上面的p保存的t的地址,而二级指针保存的是一个字符串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /

讲的好明白谢谢[/quote]

OK 有啥不明白的可以再问
  • 打赏
  • 举报
回复
引用 19 楼 5250的回复:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);

/*char *s[] 是一个指针数组,你也把它看作二维数组,数组每个成员都是一个指针(字符串),用char *p=s[1],即指针p指向指针数组的第2个成员的首地址,此时p指向第二个字符串"two"
* 指针指向数组的时候是指向数组的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一个成员,即one,所以第一个输出 w,one
*/

char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 这个题和上面一点点不同,pt是一个二级指针,二级指针和一级指针不同;一级指针保存的是一个字符的地址,比如上面的p保存的t的地址,而二级指针保存的是一个字符串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /
讲的好明白谢谢
  • 打赏
  • 举报
回复
引用 19 楼 5250的回复:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);

/*char *s[] 是一个指针数组,你也把它看作二维数组,数组每个成员都是一个指针(字符串),用char *p=s[1],即指针p指向指针数组的第2个成员的首地址,此时p指向第二个字符串"two"
* 指针指向数组的时候是指向数组的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一个成员,即one,所以第一个输出 w,one
*/

char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 这个题和上面一点点不同,pt是一个二级指针,二级指针和一级指针不同;一级指针保存的是一个字符的地址,比如上面的p保存的t的地址,而二级指针保存的是一个字符串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /
讲的好明白谢谢
  • 打赏
  • 举报
回复
引用 19 楼 5250的回复:
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);

/*char *s[] 是一个指针数组,你也把它看作二维数组,数组每个成员都是一个指针(字符串),用char *p=s[1],即指针p指向指针数组的第2个成员的首地址,此时p指向第二个字符串"two"
* 指针指向数组的时候是指向数组的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一个成员,即one,所以第一个输出 w,one
*/

char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 这个题和上面一点点不同,pt是一个二级指针,二级指针和一级指针不同;一级指针保存的是一个字符的地址,比如上面的p保存的t的地址,而二级指针保存的是一个字符串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /
讲的好明白谢谢
5250 2020-07-02
  • 打赏
  • 举报
回复
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);

/*char *s[] 是一个指针数组,你也把它看作二维数组,数组每个成员都是一个指针(字符串),用char *p=s[1],即指针p指向指针数组的第2个成员的首地址,此时p指向第二个字符串"two"
* 指针指向数组的时候是指向数组的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一个成员,即one,所以第一个输出 w,one
*/

char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 这个题和上面一点点不同,pt是一个二级指针,二级指针和一级指针不同;一级指针保存的是一个字符的地址,比如上面的p保存的t的地址,而二级指针保存的是一个字符串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /
  • 打赏
  • 举报
回复
引用 17 楼 赵4老师的回复:
A[B]
*(A+B)
*(B+A)
B[A]
//以上四行等价

"abc"[1]
*("abc"+1)
*(1+"abc")
1["abc"]
//以上四行等价

A[0]
*(A)
0[A]
//以上三行等价
听不懂
  • 打赏
  • 举报
回复
引用 13 楼 千梦一生的回复:
[quote=引用 11 楼 不许百姓点灯(^ω^) 的回复:]
[quote=引用 10 楼 千梦一生的回复:]你和我俩玩三国杀,但由于你太菜了,咱俩就商讨了一下,决定我一回合摸2张,你一回摸4张。

问:
你行动两次你摸到了几张牌?

然后又来了各老牛逼的人,它说没意思,一回他只摸1张牌。

同样他行动两次摸到了几张牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎视眈眈地盯着那一副牌堆【比如剩16张】。
但同样想把牌堆给摸完,需要地次数是不一样。对你而言,只够4次摸得。对我而言够8次。对他来说,能够他摸16次

嗯嗯[/quote]

这里有:
char 牌堆[16];
char* 他 = 牌堆;
int16* 我 = 牌堆;
int* 你 = 牌堆;

他+1 他摸一回牌。

你+3 你摸3回牌。[/quote] 哎算了
  • 打赏
  • 举报
回复
引用 13 楼 千梦一生的回复:
[quote=引用 11 楼 不许百姓点灯(^ω^) 的回复:]
[quote=引用 10 楼 千梦一生的回复:]你和我俩玩三国杀,但由于你太菜了,咱俩就商讨了一下,决定我一回合摸2张,你一回摸4张。

问:
你行动两次你摸到了几张牌?

然后又来了各老牛逼的人,它说没意思,一回他只摸1张牌。

同样他行动两次摸到了几张牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎视眈眈地盯着那一副牌堆【比如剩16张】。
但同样想把牌堆给摸完,需要地次数是不一样。对你而言,只够4次摸得。对我而言够8次。对他来说,能够他摸16次

嗯嗯[/quote]

这里有:
char 牌堆[16];
char* 他 = 牌堆;
int16* 我 = 牌堆;
int* 你 = 牌堆;

他+1 他摸一回牌。

你+3 你摸3回牌。[/quote] 哎算了
  • 打赏
  • 举报
回复
引用 13 楼 千梦一生的回复:
[quote=引用 11 楼 不许百姓点灯(^ω^) 的回复:]
[quote=引用 10 楼 千梦一生的回复:]你和我俩玩三国杀,但由于你太菜了,咱俩就商讨了一下,决定我一回合摸2张,你一回摸4张。

问:
你行动两次你摸到了几张牌?

然后又来了各老牛逼的人,它说没意思,一回他只摸1张牌。

同样他行动两次摸到了几张牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎视眈眈地盯着那一副牌堆【比如剩16张】。
但同样想把牌堆给摸完,需要地次数是不一样。对你而言,只够4次摸得。对我而言够8次。对他来说,能够他摸16次

嗯嗯[/quote]

这里有:
char 牌堆[16];
char* 他 = 牌堆;
int16* 我 = 牌堆;
int* 你 = 牌堆;

他+1 他摸一回牌。

你+3 你摸3回牌。[/quote] 哎算了
千梦一生 2020-07-01
  • 打赏
  • 举报
回复
引用 11 楼 不许百姓点灯(^ω^) 的回复:
[quote=引用 10 楼 千梦一生的回复:]你和我俩玩三国杀,但由于你太菜了,咱俩就商讨了一下,决定我一回合摸2张,你一回摸4张。

问:
你行动两次你摸到了几张牌?

然后又来了各老牛逼的人,它说没意思,一回他只摸1张牌。

同样他行动两次摸到了几张牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎视眈眈地盯着那一副牌堆【比如剩16张】。
但同样想把牌堆给摸完,需要地次数是不一样。对你而言,只够4次摸得。对我而言够8次。对他来说,能够他摸16次

嗯嗯[/quote]

这里有:
char 牌堆[16];
char* 他 = 牌堆;
int16* 我 = 牌堆;
int* 你 = 牌堆;

他+1 他摸一回牌。

你+3 你摸3回牌。
棉猴 2020-06-30
  • 打赏
  • 举报
回复
请参考《C++数组地址偏移》 希望能够帮到您!
qq_1457346882 2020-06-29
  • 打赏
  • 举报
回复
p是指向的s的第二个字符串地址,p再加一取*就求那个字符串里第二个字符是什么,也就是w,后面s0的字符串one,加一块就是wone
在数组里一级指针确定列,二级指针确定行,pt+2就是第三行的首地址,打印就打印第三行内容
  • 打赏
  • 举报
回复
引用 10 楼 千梦一生的回复:
你和我俩玩三国杀,但由于你太菜了,咱俩就商讨了一下,决定我一回合摸2张,你一回摸4张。

问:
你行动两次你摸到了几张牌?

然后又来了各老牛逼的人,它说没意思,一回他只摸1张牌。

同样他行动两次摸到了几张牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎视眈眈地盯着那一副牌堆【比如剩16张】。
但同样想把牌堆给摸完,需要地次数是不一样。对你而言,只够4次摸得。对我而言够8次。对他来说,能够他摸16次
嗯嗯
千梦一生 2020-06-29
  • 打赏
  • 举报
回复
你和我俩玩三国杀,但由于你太菜了,咱俩就商讨了一下,决定我一回合摸2张,你一回摸4张。

问:
你行动两次你摸到了几张牌?

然后又来了各老牛逼的人,它说没意思,一回他只摸1张牌。

同样他行动两次摸到了几张牌。
----------------------------------------------------------------------
他我你【1、2、4】三人都虎视眈眈地盯着那一副牌堆【比如剩16张】。
但同样想把牌堆给摸完,需要地次数是不一样。对你而言,只够4次摸得。对我而言够8次。对他来说,能够他摸16次
  • 打赏
  • 举报
回复
引用 7 楼 qybao的回复:
[quote=引用 6 楼 嘿嘿٩(๑`н´๑)۶ 的回复:]
后面为啥a[0]+2又变成a[2]?不是a[0][2]呢⊙_⊙

这就是一级指针和二级指针的区别
&a[0][2]是一级指针,&a[2]是二级指针,所以说你还是先找本入门级的数看看,你连指针,和指针的指针都分不清,没法跟你解释说明了
你自己打印
printf("%p, %p\n", (&a[0][0]+2), (&a[0]+2)); //看看有什么不同,虽然指针都是指向数组的首地址,但是指针的类型不同,加减操作的结果也不同

[/quote] 噢噢⊙_⊙好吧我打印看看
qybao 2020-04-13
  • 打赏
  • 举报
回复
引用 6 楼 嘿嘿٩(๑`н´๑)۶ 的回复:
后面为啥a[0]+2又变成a[2]?不是a[0][2]呢⊙_⊙

这就是一级指针和二级指针的区别
&a[0][2]是一级指针,&a[2]是二级指针,所以说你还是先找本入门级的数看看,你连指针,和指针的指针都分不清,没法跟你解释说明了
你自己打印
printf("%p, %p\n", (&a[0][0]+2), (&a[0]+2)); //看看有什么不同,虽然指针都是指向数组的首地址,但是指针的类型不同,加减操作的结果也不同

加载更多回复(5)

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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