C语言内存分配详解14


作用于上只将其当指针看,一个指针为4个字节,因此返回4。

————————————————-

4. main()

  {

   int a[5]={1,2,3,4,5};

   printf("%d,%d",*(a+1),*(ptr-1));

  }

输出结果是什么?

  答案:输出:2,5

  *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5

个int)

  

  原因如下:

  而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。

  a是长度为5的int数组指针,所以要加 5*sizeof(int)

  所以ptr实际是a[5]

  所以prt-1只会减去sizeof(int*)

——————————————–

5. 请问以下代码有什么

  int main()

  {

   char a;

   strcpy(str,"hello");

   printf(str);

   return 0;

  }

  答案:没有为str分配内存空间,将会发生出在将一个字符串复制进一个字符变

量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

———————————————

6. char* s="AAA";

  printf("%s",s);

  s[0]='B';

  printf("%s",s);

  有什么错?

  答案:

"AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有

cosnt char* s="AAA";

然后又因为是常量,所以对是s[0]的赋值操作是不合法的。

———————————————

7. int (*s[10])(int) 表示的是什么?

  答案:int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。

———————————————

8. 有以下表达式:

  int a=248; b=4;

  int const c=21;

  请问下列表达式哪些会被器禁止?为什么?

  答案:

*c 这是个什么东东,禁止

  *d 说了是const, 禁止

——————————————

  void getmemory(char *p)

  { 

   p=(char *) malloc(100);

   strcpy(p,"hello world");

  } 

  int main( )

  {

   char *str=NULL;

   getmemory(str);

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《C语言内存分配详解14
本文地址:https://www.zhiletu.com/archives-658.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微