linux c二级指针的内存分配和使用

#include <stdio.h>
#include <stdlib.h>
#include
<string.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    /*
这个是给str分配存储字符串地址的空间 */
    char **str =
(char**)malloc(sizeof(char*)*256);
    /*
这个是给str分配str中的地址所指向的字符串存储空间的大小 */
    *str =
(char*)malloc(sizeof(char)*256);
    /* 备份二级指针的首地址
*/
    char **strbak = str;

*str = "aaa";
    /* 打印地址
*/
    printf ("addr-str=%p\n", str);
    /*
打印aaa*/
    printf ("*str=%s\n", *str++);

*str = "bbb";
    printf
("addr-str=%p\n", str);
    printf ("*str=%s\n", *str++);

*str = "ccc";
    printf
("addr-str=%p\n", str);
    printf ("*str=%s\n", *str++);

*str = malloc(32);
    printf
("*str=%s\n", *str);
    /* 直接拷贝会报段错误 */

  strcpy (*str, "ddd");
    printf ("sizeof *str=%d\n",
sizeof(*str));
    printf ("addr-str=%p\n",
str);
    printf ("*str=%s\n", *str++);

int i;
    for (i=0; i<4;
i++)
    {
       
printf ("*strbak=%s\n", *strbak++);
   
}
    return 0;
}

时间: 2024-10-11 18:28:59

linux c二级指针的内存分配和使用的相关文章

C 结构体嵌套一级指针 二级指针 动态分配内存

#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //结构体嵌套一级指针 二级指针 动态分配内存 typedef struct _Teacher { int age; int id; char *title; char **pStuarray; char name[64]; }Teacher; //打印结构体 void printfTeac

娓娓道来c指针 (2)内存分配

(2)内存分配 c语言中描述变量的时候常用的两个用语 1.作用域:也叫可见域,指的是变量的作用范围.在哪个范围内,该变量是可见的.可以使用的. 2.生存期:也叫存储期,指的是变量从创建到销毁的生存时间段. 作用域和存在域是两个不同的概念,比如在程序的某个位置,某变量存在(内存中分配了地址)但不可见(不可使用). 作用域 从作用域看,变量分为以下三种: 1.全局变量 在c语言中,把在任何函数之外声明的变量称为全局变量.一般情况下,全局变量在任何地方都是可见的.当然也有例外,比如在语句块{}内声明了

终于懂了:Delphi的函数名不是地址,取地址必须遵守Object Pascal的语法(Delphi和C的类比:指针、字符串、函数指针、内存分配等)good

这点是与C语言不一样的地方,以前我一直都没有明白这一点,所以总是不明白:函数地址再取地址算怎么回事? ---------------------------------------------------------------------------------------------------------------- 在学习Delphi的时候,一个很好的建议是和C/C++去类比着学习,从指针,到内存管理,到数组,到面向对象……各个方面,都是有很多可以相似和或者也有不同的方,类比着学习,一

指针 &amp;&amp; 动态内存分配

C++中的动态内存分配机制 c++中使用new和delete来完成在堆上对动态内存的分配和释放. 注.所有指针都应该被初始化 如果指针指向的动态内存被释放或没有指向合法的地址,就应该将指针设置为nullptr,否则内存泄漏. 变量: double* pvalue {}; pvalue=new double; *pvalue=9.0; 或 double* pvalue {}; pvalue=new double {9.0}; 或合并为一句 double* pvalue {new double{9.

golang学习之指针、内存分配

1 func pointer_test() { 2 //空指针,输出为nil 3 var p *int 4 fmt.Printf("p: %v\n", p) 5 //指向局部变量,变量值初始为0 6 var i int 7 p = &i 8 fmt.Printf("p: %v,%v\n", p, *p) 9 //通过指针修改变量数值 10 *p = 8 11 fmt.Printf("p: %v,%v\n", p, *p) 12 //数组的

指针以及内存分配

原文:http://blog.csdn.net/bizhu12/article/details/6532235 1. 指针很灵活,这使得指针很难管理,在定义指针时,将在栈中开辟一块内存存放指针的地址(栈内的内存由系统分配和释放),指针的地址内存只是存放指针的地址,不存放指针指向的数据,值得注意的是,定义指针时指针会随机指向一块内存,如int  *p;p会指向一块不为空的内存,相当危险,例如执行判断if(!p){ printf("p为空");};这里不会输出"p为空"

【C++】Geekband-专题二:虚指针和内存分配

1. 传统继承类的设计 static void print_object(const char* name, void* this_, size_t size) { void** ugly = reinterpret_cast<void**>(this_); size_t i; printf("created %s at address %p of size %zu\n", name, this_, size); for(i = 0 ; i < size / size

二级指针的3种内存模型

二级指针的内存模型 二级指针的第一种内存模型 Char*Accary [ ] ={ "aaaaaa", "bbbbbb", "ccccccc" }; //接口形参使用方式 Intprintfarr(char **ArrayStr,int iNUm) { For(i =0; i<iNUm; i++) { Printf("%s \n", ArrayStr[i]); } } //调用方式 Printfarr(Accary, 3

未解决问题:指针作参数、二重指针、指针数组、动态内存分配

题目:输入m个学生n门课的成绩,计算每个学生的平均成绩,输入学生编号后输出该学生各门课的成绩. 先直接上源码:(有错误的源码) #include <stdio.h> #include <stdlib.h> #include <stdbool.h> int **pointer_counterpart = NULL; int main() { void Input_number(int *m, int *n); //输入m个学生n门课成绩 void allocation(i