有关C语言指针访问问题

  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函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以有可能打印出来的是乱码。

 

我只是着重说了有关我今天遇到的问题,关于这个“函数返回局部变量”的问题,更多内容请参阅我的上一篇博文,或者访问我贴出来的地址进行学习。今天就这样吧。

原文地址:https://www.cnblogs.com/symons1992/p/3353075.html