`
庚午子
  • 浏览: 14321 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

char p[]和char *p的内存分配位置不同

 
阅读更多

程序一:

void main()

{

 

char p[]="helloworld\n";

p[0]='H';

printf("%s",p);

system("pause");

}

 

此时,可以输出“Helloworld”。

程序二:

void main()

{

 

char *p="helloworld\n";

p[0]='H';

printf("%s",p);

system("pause");

}

此时,程序出错。

 

说明:

(一)在第一种情况下:程序将p分配空间到栈中,所以可以对其进行赋值,改变p[0]的值。

(二)而在第二种情况中,p的内容被分配到了字符常量中,这时候在栈中对它进行赋值,就会出错。

分享到:
评论

相关推荐

    jennic 32位机动态内存分配函数

    jennic 32位机动态内存分配函数 void *Get_Ram(uint32 Size) { uint32 Addr; char Flag; Size /= sizeof(uint32); for(Addr = 0 ; Addr (Mem) /4; Addr ++) { if(Read_MemTab_Bit(Addr) == 0) { Addr ++; ...

    C/C++中动态内存分配处理字符串的细节问题

    p=(char*)malloc(25*sizeof(char)); if(p==NULL) exit(1); //q=(char*)malloc(10*sizeof(char)); //if(q==NULL) exit(1); strcpy(p,"dongbeijadlf"); q="chenyudgf"; printf("%s ",q); printf

    二维指针动态分配内存连续问题深入分析

    #define nWidth 3#define nHeight 4//内存是否连续分配问题 int main(int argc, char *argv[]){ int **p = NULL; p = (int**)malloc(nWidth*sizeof(int*)); if(p == NULL) return -1; cout<<“内存的不...

    基于c++学生管理信息系统

    /*创建头结点并分配内存空间*/ head->link=NULL; printf("input:"); while( (ch=getchar( ))!='\n') /*创建单链表*/ { p=(llistnode *)malloc(sizeof(llistnode)); /* 创建结点,分配内存空间 */ p->value = ...

    c语言课程设计职工工资管理系统源代码.doc

    绝对可以完美运行,下面有运行图片 #include<stdio.h> //调用库函数 #include<string.h> //字符串处理 #include<conio.h> //控制台输入输出 #include<stdlib.h> //定义杂项函数及内存分配函数 #define N 2 //宏定义 ...

    实例代码分析c++动态分配

    在c中,申请动态内存是使用malloc和free,这两个函数是c的标准库函数,分配内存使用的是系统调用,使用它们必须包含stdlib.h,才能编译通过。 malloc后需要检查内存是否分配成功,free则要在指针不为空的情况下才能...

    c++ 面试题 总结

    一个指向char类型的const对象指针,p不是常量,我们可以修改p的值,使其指向不同的char,但是不能改变它指向非char对象,如: const char *p; char c1='a'; char c2='b'; p=&c1;//ok p=&c2;//ok *p=c1;//error (2)...

    IT常见面试笔试题含答案

    3.13 描述内存分配方式以及它们的区别。 (Autodesk , Microsoft) 答案:1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块 内存在程序的整个运行期间都存在。例如全局变量,static 变量。 (2) 在栈...

    用C编写班级成绩管理系统

    在对链表操作时,要特别链表指针的移动(p=p->next)和链表尾的判断 (p= =NULL)。没有指针的移动,就很容易出现死循环。而在运行过程中不能控制。所以你就会认为是死机。如果没有链表尾的判断。就会在运行过程出现...

    模拟实现C语言中的内存管理

    这里模拟了C语言中的内存管理,当我们要创建或者使用一个对象时,那么这个对象会调用retain方法,计数+1,当我们要释放对象,我们会调用free,这里注意要对计数记性判断,如果是0的话,那么就会销毁。 #import int ...

    最新名企标准通用C++面试题,

    栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 3. 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。...

    neicun.rar_Unsigned_memory

    我所采用的内存管理思想是链表管理思想,内存分配方案是最佳适应方案(best fit)。其主要的数据结构为 struct node { char* p int memosize int flag struct node* next } 这是一个链表的结点的数据结构,...

    香农编码实验报告.doc

    湖 南 大 学 信息科学与工程学院 实 验 报 告 "实验名称 "香农编码 " "课程名称 "信息论与编码 " " " " 1、实验目的 (1)进一步熟悉Shannon... } /*为码字分配内存地址*/ C=(char **)calloc(n,sizeof(char *)); for(i=

    用c语言设计工资管理

    #include "mem.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*/ #include "alloc.h" /*动态地址分配函数*/ /****变量定义*******/ typedef struct z1 /*定义数据结构*/ { char no[11]; /*编号*/ char ...

    航空订票系统源代码 c

    PR("内存分配失败\n"); return OVERFLOW; }*/ strcpy(q->name , name); strcpy(q->line_num , line_num); q->seat_num =seat; q->next=NULL; (*p)->next=q; ……………………………………

    vld(Visual Leak Detector 内存泄露检测工具 源码)

    这个函数需要处理的事情是记录下此时的调用堆栈和此次堆内存分配的唯一标识——requestNumber。  得到当前的堆栈的二进制表示并不是一件很复杂的事情,但是因为不同体系结构、不同编译器、不同的函数调用约定所产生...

    hafumanshu

    if(T.Node==NULL) //哈夫曼树不在内存,从文件hfmTree中读入 { ifstream infile0; //以二进制方式打开hfmTree.dat文件 infile0.open("hfmTree.dat",ios::binary|ios::in); if(infile0.fail()) { cout文件...

    进程同步问题模拟程序

    printf("内存分配失败"); return false; } p->flag=f; processnum++; p->numlabel=processnum; p->state='w'; p->processlink=NULL; if(p->flag==1){ printf("您要产生的进程是生产者,它是第%d个进程。请...

    你必须知道的495个C语言问题

    1.20 constchar*p、charconst*p和char*constp有什么区别? 复杂的声明 1.21 怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 1.22 如何声明返回指向同类型函数...

    小型售货机

    int Add_Goodnode(int Goodnum,char *Goodname,char *exp,char *pubname,int innum,float buyp,float sellp,Good* last); //-----------------------添加货物信息模块-----------------------// void Add_info(Good...

Global site tag (gtag.js) - Google Analytics