test1.c
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
char *b = "abcdefg";
void change_char(char *str)
{
str = b;
printf("str[%s] \n",str);
}
int main(int argc, char **argv)
{
char *a = NULL;
change_char(a);
printf("a[%s] \n",a);
}
gcc test1.c -o test1
执行结果
str[abcdefg]
a[(null)]
test2.c
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
char *a = NULL;
char *b = "abcdefg";
void change_char(char *str)
{
str = b;
printf("str[%s] \n",str);
}
int main(int argc, char **argv)
{
change_char(a);
printf("a[%s] \n",a);
}
gcc test2.c -o test2
执行结果
str[abcdefg]
a[(null)]
test3.c
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
char *b = "abcdefg";
void change_char(char **str)
{
*str = b;
printf("str[%s] \n",*str);
}
int main(int argc, char **argv)
{
char *a = NULL;
change_char(&a);
printf("a[%s] \n",a);
}
gcc test3.c -o test3
执行结果
str[abcdefg]
a[abcdefg]
疑惑:
1.test1,test2执行结果,说明什么问题?作用域的问题?
2.test3执行结果,说明的确把指针a的地址值更改为指针b的地址值。
总结:
1.任何指针的占用空间都是4个字节大小,如果指针没有指向分配的某一块具体空间地址,千万不能针对该指针执行具体操作!!!!
2.程序本质上都是针对内存空间的内容进行操作的,一定要仔细考量!
3.