C语言字符指针赋值的问题
#include <stdio.h>
void Initialize (char * a, char * b) {
a[0] = 'T'; a[1] = 'h'; a[2] = 'i';
a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's';
a[7] = ' '; a[8] = 'A'; a[9] = '\0';
b = a;
b[8] = 'B';
}
#define ARRAY_SIZE 10
char a[ARRAY_SIZE];
char b[ARRAY_SIZE];
int main(int argc, char * argv[]) {
Initialize(a, b);
printf("%s\n%s\n", a, b);
return 0;
}
题意是打印两个 This is B,即:
This is B
This is B
但程序的运行结果是:
This is B
(空)
char a[ARRAY_SIZE];
char b[ARRAY_SIZE];
这是两个已开辟空间的了数组
void Initialize (char * a, char * b) 这是两个形参,纯指针!
Initialize(a, b); 这句过后,形参指针ab就分别指向了数组ab!
a[0] =.....这是通过指针a间接往数组a赋值!
b = a;//b指针本来指向数组b ,但这句边变成把b指针指向a指针所指向的空间,也就是b指针也指向了数组a,而不是内容copy!
This is B
(空)
第二句是空那是因为b数组从未被赋值,它都是0,0是字符串结束符,
char b[ARRAY_SIZE];
这是两个已开辟空间的了数组
void Initialize (char * a, char * b) 这是两个形参,纯指针!
Initialize(a, b); 这句过后,形参指针ab就分别指向了数组ab!
a[0] =.....这是通过指针a间接往数组a赋值!
b = a;//b指针本来指向数组b ,但这句边变成把b指针指向a指针所指向的空间,也就是b指针也指向了数组a,而不是内容copy!
This is B
(空)
第二句是空那是因为b数组从未被赋值,它都是0,0是字符串结束符,
种一棵树最好的时间是十年前,其次是现在。