注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 

日志

 
 

指针与二维数组  

2012-02-28 19:52:19|  分类: C/C++编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这方面知识得不断强化:

  
na  
代表维数组的首地址,0的地址
na+i
代表i的地址
n*(a+i) a[i]
代表i行第0的地址
n*(a+i)+j a[i]+j
代表i行第j的地址
n*(*(a+i)+j ) a[i][j]
代表i行第j元素
 
n元素a[i][j]的地址的几种等价的引用方式
&a[i][j]
a[i]+j
*(a+i)+j
&(*(a+i))[j]
n元素a[i][j]的几种等价的引用方式
a[i][j]
*(a[i]+j)
*(*(a+i)+j)
(*(a+i))[j]
 
n二维数组的指针——列指针
int *p;
p = *a;//用列地址初始化
n相对于数组起始地址的偏移量
i*m+j
for (i=0; i<n; i++)
for (j=0; j<m; j++)
  printf(
"%d",*(p+i*m+j));
 
n二维数组的指针——行指针
int (*p)[3];
p = a;//地址初始化
for (i=0; i<n; i++)
for (j=0; j<m; j++)
  printf(
"%d",*(*(p+i)+j));
 
//指针数组 
main()
{
    int i;
    char *ptr[] = {"Pascal","Basic","Fortran",
                    "Java","Visual C"};
    char **p;
  p = ptr;
    for (i=0; i<5; i++)
    {
        printf("%s\n", *p);
        p++;
    }
}
 
 
动态分配内存

 

n<stdlib.h> <alloc.h>中均定义了下面的函
nvoid* malloc(unsigned int size);
向系统申请大小为size的内存块,把首地址返回。如果申请不成功,返回NULL
nvoid  *calloc(unsigned int num, unsigned int size);
向系统申请numsize大小的内存块,把首地址返回。如果申请不成功,返回NULL
nvoid free(void* p);
释放由malloc()calloc()申请的内存块。p是指向此块的指针
 
一维动态数组 :
 
#include  <stdlib.h>
main()
{
int  *p = NULL, n, i, sum;
printf("Please enter array size:");
scanf("%d", &n);                 
p = (int *) malloc(n * sizeof (int));   
if (p == NULL)
{
    printf("No enough memory!\n");
    exit(0);
}
printf("Please enter the score:");
for (i=0; i<n; i++)
{
    scanf("%d", p + i);             
}
sum = 0;                         
for (i=0; i<n; i++)
{
    sum = sum + *(p + i);           
}
printf("aver = %d\n", sum/n);       
free(p);                           
}
 
二维动态数组
 
#include  <stdlib.h>
main()
{
int  *pScore = NULL, i, j, m, n, maxScore, row, col;
printf("Please enter array size m,n:");
scanf("%d,%d", &m, &n);
pScore = (int *) calloc(m*n, sizeof (int));
if (p == NULL)
{
    printf("No enough memory!\n");
    exit(0);
}
printf("Please enter the score:");
for (i=0; i<m; i++)
{
for (j = 0; j<n; j++)
{
    scanf("%d", &pScore [i*n+j]);
}
}
maxScore = FindMax(pScore, 3, 4, &row, &col);
printf("maxScore = %d, class = %d, number = %d\n",
   maxScore, row+1, col+1);
free(pScore );                           
}
  评论这张
 
阅读(825)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017