关闭

c++指针&指针数组&数组的指针 的测试

标签: c++指针
153人阅读 评论(0) 收藏 举报
分类:

// myc++.cpp : 定义控制台应用程序的入口点。

//


#include "stdafx.h"//引用外部文件

#include <stdio.h>

#include <iostream>

using namespace std;

int _tmain(intargc,_TCHAR* argv[])

{

/*

int C;

const int a = 10;

int B[2] = { 1, 2 };

cin >> C;

cout << C;

printf("是是是\n",a);

cout <<"A等于"<<a<<"数组"<<B[1];

*/

//-------------------------------------------------------------------------

//int B[5] = {1,8,9,6,3};

//int *P = B;//指针指向数组首地址,那么可以用指针的偏移运算来指向数组的各个地址

//for (int i = 0; i < 5; i++)

//{


 //       cout << *B<<"\n";//B表示数组的首地址,*B表示第一个元素

// cout << "下面是通过一个数组首地址偏移指向数组的值\n";

// cout << *(B+i);//可以通过数组首地址进行偏移

// cout << "下面是通过指针变量偏移指向数组的值\n";

// cout << *(P++);//指针变量的偏移运算(通常用于数组因为数组的 元素地址是连续的)P+1表示 偏向内存地址单元的下一个单元

// cout << "下面是通过指针变量下标指向数组的值";

//    cout << P[i]<< "\n";//指针变量P原本是指针变量,现在用下标号表示数组的某个值

// cout << B[i];

//}


//------------------------------------------------------------------------------指针数组【栈级别】

int A[3][3] = { { 1, 2, 3 }, { 11, 56, 465 }, { 8, 65, 48 } };//定义一个数组

int*P[] = { A[0], A[1], A[2] };//声明指针数组,把数组中的【每行】元素首地址赋值给指针数组

int i = 0;

for (i; i < 3; i++)

{

/* P[i] = A[i];*/

// cout << *A[i]<<"\n";

cout << "\n";

for (int j = 0; j < 3;j++)

{

cout << *(P[i]++)<<"\a ";

cout << P[i][j]<<"  ";

cout << *(A[i]+j)<<"\n";//A[i]表示每一列的一位数组的首地址

}

}

cout << "\n上面是对【指针数组】【栈级别】的测试效果\n\r";

//int B[][3] = { {4,5,6}, {8,7,9} };

//---------------------------------------------------------------指针数组的堆空间申请、赋值和删除,堆空间需要手动申请和删除【指针数组-堆】

      int *p2[2] = { NULL, NULL };

      for (int i = 0; i < 2; i++)

      {

      p2 [i]= newint[2];//堆级别的指针数组

      }

     

      //数组指针的堆空间赋值

      *p2[0] = 100;

      *p2[1] = 200;

      //输出

      for (int i = 0; i < 2; i++)

      {

      printf("%d, ",*p2[i]);

      }

      //清除

      for (int i = 0; i < 2; i++)

      {

      delete[]p2[i];

      p2[i] = NULL;

      }

cout << "\n上面是对【指针数组】【堆级别】的测试效果\n\r";

//----------------------------------------------------------------------------测试指一个指向数组的指针也就是[数组指针]【栈级别】

int C[2][3] = { { 1, 2, 3 },

                { 4, 5, 6 } };//三列的数组,为数组开辟好了栈空间~!

int(*p3)[3];

p3 =C;//C数组的第一个元素的地址.&C表示数组的首地址

for (int i = 0; i < 2; i++)

{

cout << "\n";

for (int j = 0; j < 3; j++)

{

//cout << *(*(p3 + i) + j)<<", ";//数组的指针的输出

//或者

cout << (*(p3 + i))[j] << ", ";//数组的指针的输出


}

}

cout << "\n上面是对【数组的指针】【栈级别】的测试效果\n\r";

//cout << (*(p3 + 1))[2]<<"\n\r";// (*(p3 + 1))表示第2行的第一个元素地址

//cout <<p3<< "\n";//p3是一个第一行的元素的首地址

//cout << *p3 << "\n";//*p3是一个第一列的元素的首地址


//cout << *(*p3)<< "\n";//*(*p3)是一个第一列的元素的首地址值

//cout << *(*p3+1) << "\n";//*(*p3)是一个第二列的元素的首地址值


//cout << *(*(p3+0)+1) << "\n";//输出第1行(p3+0)第2列的元素值

//cout << *(*(p3+1)+1)<<"\n";//输出第2行(p3+0)第2列的元素值

//注:直接在p3上增加数表示二维数组中每行首元素地址的偏移 ,如p3表示第一行首元素地址 p3+1 表示第二行首个元素地址  但是在 *(p3+x)上增加数,表示某行中 列的元素地址偏移如*(p3+x)+1 表示x行第二列的元素地址

/*

int a[5], i, *pa;

pa = a;

for (i = 0; i<5; i++){

*pa = i;

pa++;

}

pa = a;

for (i = 0; i<5; i++){

printf("a[%d]=%d\n", i, *pa);

pa++;

}*/

//------------------------------------------------------------------------测试指一个数组的数组指针【堆】


int(*p4)[3]=newint[5][3];//对于开辟栈空间的数组指针,因为事实上只有一个指针,那么直接用堆的申请方式New出一个 自定义的数组即可


//我要有一个数组用于放在这个申请好的空间中

int D[5][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 11, 21, 32 }, { 45, 8, 6 }};

//用于赋值

for (int i = 0; i < 5; i++)//给这个申请的二维空间地址赋值

{

for (int j = 0; j <3; j++)

{

//给这个二维空间每个地址内存赋值

*(*(p4 + i) + j) = D[i][j];

}

}

//用于输出

for (int i = 0; i < 5; i++)//给这个申请的二维空间地址赋值

{

cout << "\n";

for (int j = 0; j <3; j++)

{

//给这个二维空间每个地址内存赋值

cout<<*(*(p4 + i) + j)<<", ";

}

}

//在堆中申请的空间记得清空

delete[]p4;

p4 = 0;


cout << "\n上面是对【数组的指针】【堆级别】的测试效果\n\r";

return 0;

}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

得到指针指向的数组的长度

1  、定义数组,要给定其长度,也可以用Type a[ ] = {……} 的方式。 在对数组进行操作时,可能需要计算数组长度,方法是:sizeof(数组名)/sizeof(元素类型)     ...
  • u013349653
  • u013349653
  • 2016-05-03 14:58
  • 7398

面试题之数组指针和指针数组的区别

1、数组指针(指向数组的指针) (1)数组在内存中的表示 创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的...
  • sum_TW
  • sum_TW
  • 2016-12-09 16:28
  • 3897

关于C语言你不知道的事(1)–指针和数组的区别

关于C语言你不知道的事(1)–指针和数组的区别 Table of Contents 1 一个很多人都会做错的面试题 2 数组与指针的差别 2.1 数组和指针是如何访问的 2.2 数组和指针可...
  • huangkangying
  • huangkangying
  • 2014-12-29 21:59
  • 3427

C++一维数组和指针的关系总结

  • 2014-11-01 17:18
  • 41KB
  • 下载

《C++语言程序设计》第六章_数组__指针与字符串

  • 2013-01-05 20:41
  • 793KB
  • 下载

c++指针与数组.ppt

  • 2008-09-26 18:42
  • 81KB
  • 下载

C/C++之数组与指针的艺术

  • 2011-11-23 23:27
  • 679KB
  • 下载

Visual C++ 2005入门经典中文版-4数组、字符串和指针

  • 2008-12-15 11:26
  • 8.97MB
  • 下载

第6章 数组 指针与字符串O(郑莉 C++语言程序设计(第4版))

  • 2017-11-29 21:43
  • 5.15MB
  • 下载

C/C++中数组与指针的关系

  • 2009-12-10 16:39
  • 132KB
  • 下载
    个人资料
    • 访问:49619次
    • 积分:760
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:26篇
    • 译文:1篇
    • 评论:6条