第十一章 指针和数组 【JOANNE FIRST】

第十一章 指针和数组
11.1 指针与一维数组间的关系
1.没有多大意义的指针表示数组
int a[10];
int *p;
p=a;或p=&a[10];
数组地址表示:a+i<=>p+i<=>&a[i]<=>&p[i]
数组值表示:  *(a+i)<=>*(p+i)<=>a[i]<=>p[i]
【注意】a++,a--是不能用的,因为a是地址常量
        p++,p--与p+1和p-1是不同的,前者动态移动,后者只是静态标签式的表示
2.有大意义的传数组指针
(1)int method(int a[],int n)fit scanf(&a[i])fit printf(a[i])
(2)int method(int *pa,int n)fit scanf(pa)pa++fit printf(*pa)pa++
(3)int method(int a[],int n)fit scanf(a+i)fit printf(*(a+i))
(4)int method(int *pa,int n)fit scanf(&p[i])fit printf(p[i])
11.2 指针和二维数组间的关系
1.没有多大意义的指针表示数组
(1)
int a[3][4]
int (*p)[4]
p=a或p=&a[0]//p是行指针
数组值表示:p[i][j]<=>*(p[i]+j)<=>*(*(p+i)+j)<=>(*(p+i))[j]//将a换成p
数组地址表示:&p[i][j]<=>p[i]+j<=>*(p+i)+j<=>&(*(p+i))[j]
(2)
int a[3][4]
int *p;
int **q;
q=&p;
p=a[0]或p=&a[0][0]或p=*a//p是列指针,将二维数组看成是一位数组
【注意】此时不能用p[i][j]表示数组,同理(1)中
q=&a[0]或q=&&a[0][0]或q=a;//q是行指针,与(1)中p相同
数组值表示:a[i][j]<=>p[i*n+j]<=>*(p+i*n+j)
数组地址表示:&a[i][j]<=>&p[i*n+j]<=>p+i*n+j
2.有大意义的传数组指针
(1)int method(int a[][N],int m,int n)fit scanf(&a[i][j])fit printf(a[i][j])
(2)int method(int (*p)[N],int m,int n)fit scanf(*(p+i)+j)fit printf(*(*(p+i)+j))
(3)int method(int *p,int m,int n)fit scanf(&p[i*n+j])fit printf(p[i*n+j])
11.3 指针数组:由若干相同类型的指针所构成的
作用:对多个字符串处理操作 速度比二维字符数组更快
search 例11.4
11.4 动态数组
1.c程序的内存映射
从低端向高端
(1)只读存储区
代码段:程序的机器代码
常量存储区:字符串常量
(2)静态存储区
全局变量和静态变量(编译时分配内存,运行期间始终占用内存,仅在程序终止前被操作系统收回)
(3)动态存储区
堆:调用动态内存分配函数(自定义分配内存,free()释放内存)
栈:局部变量,函数形参,返回值等(调用函数时局部变量及形参分配内存,函数执行结束后释放内存)
2.动态内存分配函数
(1)void *malloc(unsigned int size)//size以字节为单位
int *p=NULL;
pi=(int *)malloc(sizeof(int));//强制类型转换
(2)void *calloc(unsigned int num,unsigned int size)//相当于一个一维数组
float*pf=NULL;
pf=(float *)calloc(10,sizeof(float))<=>pf=(float *)malloc(10*sizeof(float))
(3)void *realloc(void *p,unsigned int size)//改变原来分配的大小
函数返回值是新分配的内存首地址,与原来的不一样
(4)void free(void *p)
3.长度可变的一维动态数组
search 例11.6
4.长度可变的二维动态数组
search 例11.7

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
function varargout = mixexpPredict(model, X) %% Predict using mixture of experts model % If the response y is real-valued, we return % [mu, sigma2, post, muk, sigma2k] = mixexpPredict(model, X) % mu(i) = E[y | X(i,:)] % sigma2(i) = var[y | X(i,:)] % weights(i,k) = p(expert = k | X(i,:) % muk(i) = E[y | X(i,:), expert k] % sigma2k(i) = var[y | X(i,:), expert k] % % If the response y is categorical, we return % [yhat, prob] = mixexpPredict(model, X) % yhat(i) = argmax p(y|X(i,:)) % prob(i,c) = p(y=c|X(i,:)) % This file is from pmtk3.googlecode.com [N,D] = size(X); %X = standardize(X); %X = [ones(N,1) X]; if isfield(model, 'preproc') [X] = preprocessorApplyToTest(model.preproc, X); end K = model.nmix; if model.fixmix weights = repmat(model.mixweights, N, 1); else weights = softmaxPmtk(X*model.Wq); % weights(n,q) end if model.classifier % implemented by JoAnne Ting prob = zeros(N, size(model.Wy,2)); yhat_k = zeros(N, model.Nclasses, K); for k = 1:K yhat_k(:,:,k) = softmaxPmtk(X*model.Wy(:,:,k)); % Weighted vote prob = prob + yhat_k(:,:,k) .* repmat(weights(:,k), 1, size(model.Wy,2)); end yhat = maxidx(prob, [], 2); varargout{1} = yhat; varargout{2} = prob; else % mean of a mixture model is given by % E[x] = sum_k pik muk %mu = sum(weights .* (X*model.Wy), 2); % variance of a mixture model is given by % sum_k pi_k [Sigmak + muk*muk'] - E[x] E[x]' muk = zeros(N,K); vk = zeros(N,K); mu = zeros(N,1); v = zeros(N,1); for k=1:K muk(:,k) = X*model.Wy(:,k); mu = mu + weights(:,k) .* muk(:,k); vk(:,k) = model.sigma2(k); v = v + weights(:,k) .* (vk(:,k) + muk(:,k).^2); end v = v-mu.^2; varargout{1} = mu; varargout{2} = v; varargout{3} = weights; varargout{4} = muk; varargout{5} = vk; end end
07-13

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值