C、C++: 引用、指针、实例、内存模型、namespace

// HelloWorld.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "string.h"#include "iostream.h"

/**
 * 在C、C++语言中
 *      声名语句中:    声明指针变量用*,声明变量或者常量都不加*。
 *                        譬如函数声明中的参数,返回值类型等。例如类中的字段的声明。
 *        在赋值语句中:  * 表示取值。   &表示取变量的地址,也就是取指针。
 *
 *      class,struct,unit:    也遵循上述原则。另外,
 *                            在使用指针进行变量的访问、方法的调用时,要使用 ->
 *                            在使用实例进行变量的方式、方法的调用时,要使用.
 *                          例如personTest()方法中:
 *                          p是指针,*p就是p所指向的实例。
 *
 *      personTest()测试中的内存模型:
 *     指针p                Value *p ,也可以称为实例
 *     ___________             __________           ___________
 *    |           |           | name     |-------> |Fang JiNuo | *name
 *    |           |  —————>   | age : 23 |         |___________|
 *    |___________|           | address  |         ______________________
 *                            |__________|-------> | Bei Jing, Haid Dian | *address
 *                                                 |_____________________|
 */
class Person
{
    private:
        char* name;
        int age;
        char* address;
    public :
        char* toString()
        {
            char* ret=name;
            return ret;
        }
        void setAge(int age){
            this->age=age;
        }
        void setAddress(char* address){
            this->address=address;
        }
        void setName(char* name){
            this->name=name;
        }
};

void personTest(){
    Person * p=new Person();
    p->setAddress("Bei Jing, Hai Dian"); // 采用指针的方式赋值
    (*p).setName("Fang JiNuo");          // 采用对象的方式赋值
    (*p).setAge(23);
    printf("show info:\n%s\n", (*p).toString());
}

void switchTest(){
    int a=23;
    int b=1;
    int c=0;
    char oper=‘+‘;
    switch(oper){
    case ‘+‘:
        c=a+b;
    case ‘-‘:
        c=a-b;
        break;
    case ‘*‘:
        c=a*b;
        break;
    }
    printf("c = %d %c %d = %d", a, oper, b, c);
}

/**
 * C 语言的输入输出
 */
void input_Output_test_c(){
    printf("Hello World!\n");
    printf("zhang san, wo cao \n");
    int a,b;
    printf("input tow int number, pattern is d, d:\n");
    scanf("%d, %d", &a, &b);
    printf("a is %d\n",a);
    printf("b is %d\n",b);
    printf("a+b=%d\n",a+b);
}

/**
 * C++ 的输入输出
 * 使用前需要include iostream.h
 */
 void input_Output_test_cpp()

{

     // << out1 << out2 << out3 << out4 << endl;
     // endl 代表endline,也就是换行
     char * content=new char;
     cout << "plese input:" << endl;
     cin>> content;
     cout << content << endl;
  }


/**
 * namespace
 * C 语言不支持。
 * C++ 支持。
 *
 */
  namespace MyNS
  {
    void namespaceTest(){
      cout << "MyNS namespace invoked" << endl;
    }
  }


  void namespaceTest(){
    cout << "current namespace invoked" << endl;
  }

int main(int argc, char* args[])
{

// input_Output_test_c();
// personTest();
// switchTest();
// input_Output_test_cpp();
namespaceTest();
MyNS::namespaceTest();

    return 0;
}
时间: 2024-10-27 19:29:51

C、C++: 引用、指针、实例、内存模型、namespace的相关文章

字符串一级指针的内存模型图(盲点,以前自己懵懂)

#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> void main61() { char buf[20]= "aaaa"; //定义并且初始化 char buf2[] = "bbbb"; char *p1 = "111111"; char *p2 = malloc(100); s

二级指针的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

二级指针的三种内存模型

第一种内存模型: /* Module: 二级指针第一种内存模型.cpp Notices: Copyright (c) 2017 Landy Tan */ #include <iostream> using namespace std; ///////////////////////////////////////////////// #define SIZE(a) sizeof(a) / sizeof(a[0]) int SortArray(char **pArray, int nLen);

C++二级指针第二种内存模型(二维数组)

C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4],b[5][10]; 二维数组元素地址 #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; int a[3][4]={ {1,2,3

Jvm(31),理解升级----通过JVM内存模型深入理解值传递和引用传递两种方式

值传递和引用传递分析 Java中数据类型分为两大类:基本类型和引用类型(也就是对象类型). 基本类型:boolean.char.byte.short.int.long.float.double 引用类型:类.接口.数组 因此,变量类型也可分为两大类:基本类型和引用类型. 在分析值传递和引用传递之前,建议了解下以上变量类型在Java内存管理模型中的位置,如果对此有所了解,将更加有助于理解两种传递的方式^_^ 在Java内存中,基本类型变量存储在Java栈(VM Stack)中,引用变量存储在堆(H

C二级指针内存模型一

#include <stdio.h> #include <stdlib.h> #include <string.h> /* 二级指针的第一种内存模型 */ //打印字符串数组 int printArray(char **arrayStr,int num) {     int i = 0;     for (i=0; i<num; i++)     {         printf("%s \n",arrayStr[i]);     }     

C二级指针内存模型二

#include <stdio.h> #include <stdlib.h> #include <string.h> /* 二级指针的第二种内存模型 */ //打印字符串数组 int printArray(char arrayStr[10][30],int num) {     int i = 0;     for (i=0; i<num; i++)     {         printf("%s \n",arrayStr[i]);     

C二级指针内存模型三

#include <stdio.h> #include <stdlib.h> #include <string.h> /* 二级指针的第三种内存模型 */ //打印字符串数组 int printArray(char **arrayStr,int num) {     int i = 0;     for (i=0; i<num; i++)     {         printf("%s \n",arrayStr[i]);     }     

C语言 二级指针内存模型

//二级指针第一种内存模型 #include<stdio.h> #include<stdlib.h> //说明:①:类似于int a[5]={0},数组名a是一维数组a中首元素的指针:(我自认为此假设可应用于多维数组与指针) //②二级指针的主要功能是修改一级指针的值 //打印一维数组 int PrintArr(char **pin,int num){ int ERRO_MSG = 0; if (pin==NULL) { ERRO_MSG = 1; printf("pin