Redian新闻
>
Business credit card怎么申?
avatar
Business credit card怎么申?# Money - 海外理财
w*y
1
careercup上面,chapter1, 问题 1.2
看了答案有点疑惑:
1 void reverse(char *str){
2 char *end = str;
3 char tmp;
4 if (str) {
5 while (*end){
6 ++end;
7 }
8 --end;
9 while (str < end){
10 tmp = *str;
11 *str++ = *end;
12 *end-- = tmp;
13 }
14 }
15 }
疑惑在第九行,(str < end) 两个指针比较什么意思?会有什么结果?
谢谢。
avatar
l*e
2
想申请chase ink, 可是发现是business card, 请问如果自己没有small business的话
怎么申请啊? 好像看到不少人都申请到了 指点一下 多谢!!!
avatar
s*y
3
str pointer moving from left to right
end pointer moving from right to left
if they meet, it is time to quit and return.

【在 w****y 的大作中提到】
: careercup上面,chapter1, 问题 1.2
: 看了答案有点疑惑:
: 1 void reverse(char *str){
: 2 char *end = str;
: 3 char tmp;
: 4 if (str) {
: 5 while (*end){
: 6 ++end;
: 7 }
: 8 --end;

avatar
C*s
4
就说你是Amazon 上卖袜子子的,人若不信就真的放几双臭袜子上去叫卖。

【在 l***e 的大作中提到】
: 想申请chase ink, 可是发现是business card, 请问如果自己没有small business的话
: 怎么申请啊? 好像看到不少人都申请到了 指点一下 多谢!!!

avatar
w*y
5
所以while(str < end)比较的是地址么? 如果str的地址小于end的话,str继续前进,
end继续后退?

【在 s*****y 的大作中提到】
: str pointer moving from left to right
: end pointer moving from right to left
: if they meet, it is time to quit and return.

avatar
y*g
6
前进后腿是什么意思?
对c string, 地址可以理解为数组的index
char* a;
str=a;
str++;
str就合a[1]一样

【在 w****y 的大作中提到】
: 所以while(str < end)比较的是地址么? 如果str的地址小于end的话,str继续前进,
: end继续后退?

avatar
w*y
7
就是 *str++ 和 *end--, 由于是后缀的,所以他们先交换值了以后再移动一位地址:
等于:
*str = *end;
str++;
end--;
就是我说前进后退的意思.



【在 y*******g 的大作中提到】
: 前进后腿是什么意思?
: 对c string, 地址可以理解为数组的index
: char* a;
: str=a;
: str++;
: str就合a[1]一样

avatar
m*2
8
别学坏了
这个答案不好

【在 w****y 的大作中提到】
: careercup上面,chapter1, 问题 1.2
: 看了答案有点疑惑:
: 1 void reverse(char *str){
: 2 char *end = str;
: 3 char tmp;
: 4 if (str) {
: 5 while (*end){
: 6 ++end;
: 7 }
: 8 --end;

avatar
w*y
9
还有什么好答案?

【在 m*********2 的大作中提到】
: 别学坏了
: 这个答案不好

avatar
w*y
10
我不知道你怎么初始化的,但按照我的理解,结论和你不一样:
假设:string strX第一个element的地址是0001
char strX[] = "MITBBS";
char *a;
a = strX;
那么 *(a+1) 和 a[1] 是一样的,指`\I`.
如果:
str = a;
str++;
那么str此时为0002, 和a[1]不一样。
不知道我理解有没有错。

【在 y*******g 的大作中提到】
: 前进后腿是什么意思?
: 对c string, 地址可以理解为数组的index
: char* a;
: str=a;
: str++;
: str就合a[1]一样

avatar
m*2
11
那是因为complier知道那是char pointer.
所以你str++; 它会帮你加1 byte.
如果你用double++, 它帮你加4 byte

【在 w****y 的大作中提到】
: 我不知道你怎么初始化的,但按照我的理解,结论和你不一样:
: 假设:string strX第一个element的地址是0001
: char strX[] = "MITBBS";
: char *a;
: a = strX;
: 那么 *(a+1) 和 a[1] 是一样的,指`\I`.
: 如果:
: str = a;
: str++;
: 那么str此时为0002, 和a[1]不一样。

avatar
m*2
12
我考试时是这样写的. 不太好, 应该是比那个强吧
char *strrev(char *s)
{
int length =0;
while (*s++)length++;
char* ptr = s;
char* result = (char *)malloc(length+1);

int i=0;
for (; i < length; i++;)
*(result+i) = *--ptr;
*(result + i + 1) = '\0';
return result;
}

【在 w****y 的大作中提到】
: 还有什么好答案?
avatar
s*y
13
you malloc a new buffer in your function and this is not in place reverse.
This will lead to memory leak.

【在 m*********2 的大作中提到】
: 我考试时是这样写的. 不太好, 应该是比那个强吧
: char *strrev(char *s)
: {
: int length =0;
: while (*s++)length++;
: char* ptr = s;
: char* result = (char *)malloc(length+1);
:
: int i=0;
: for (; i < length; i++;)

avatar
m*2
14
thanks.
good points.

reverse.

【在 s*****y 的大作中提到】
: you malloc a new buffer in your function and this is not in place reverse.
: This will lead to memory leak.

avatar
f*4
15
别return malloc的内存
真的要是无法避免可以这么写
void sttrev(char *s, char *d);
然后假设s,d大小一致;函数内直接使用
这样的话别人没法挑错

【在 m*********2 的大作中提到】
: 我考试时是这样写的. 不太好, 应该是比那个强吧
: char *strrev(char *s)
: {
: int length =0;
: while (*s++)length++;
: char* ptr = s;
: char* result = (char *)malloc(length+1);
:
: int i=0;
: for (; i < length; i++;)

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。