C语言指针访问问题今天有了一些理解。
char *p;
char *q;
char k[10000];
我之前一直以为他们两个一样用,因为之前看到说k也是一个地址,我忽略了后面的一句话,k是连续的一段地址,而p的使用需要malloc这点我忽略了。今天访问时候p[10]一直报错,我很不解,怎么回事呢,然后用strcat(p,q)也是不行。
我进行了百度,在使用strcat函数时候,会把p结尾的' '去掉,然后把q的值接上去,而且p所指的范围一定要够大,能够容纳p+q的容量。如果p是char *声明的话,只是声明了一个地址,并没有分配内存,访问的话,谁知道访问到哪里去了呢?
最可笑的是我char *a="hahaha"; char *k; k=a; 多么低级的错误,当局者迷,现在才深刻认识到我的笨蛋。
所以在strcpy的时候,并不知道p分配内存的大小,所以必然报错嘛!
还有在“函数返回局部变量 ”这个问题上。
我是这么写的:
char *
haha(char *a,char *b){
char p[100];
...
...
return p;
}
我是这么写的,然后编译器给我来了段警告,“函数返回局部变量的地址”然后我百度了一下。
发现了这篇文章,我已经把这篇文章转到了我的博客上。http://blog.csdn.net/haiwil/article/details/6691854/
函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。
char *
haha(){
char *p="ssssss";
return p;
} 这是可以的,这个没有任何问题,因为"ssssss"是一个字符串常量,存放在只读数据段,把该字符串常量存放的只读数据段的首地址赋值给了指针,所以returnStr函数退出时,该该字符串常量所在内存不会被回收,故能够通过指针顺利无误的访问。
char *
haha(){
char p[100]="ssssss";
return p;
}"ssssss"是局部变量存放在栈中。当returnStr函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以有可能打印出来的是乱码。
我只是着重说了有关我今天遇到的问题,关于这个“函数返回局部变量”的问题,更多内容请参阅我的上一篇博文,或者访问我贴出来的地址进行学习。今天就这样吧。