我的C语言入门到精通之路 day06


2.不论是何种类型的指针,都占据4个内存字节(这是由32位地址数据决定的)。如果是64位操作系统,指针就是8个字节。
3.原则上说,指针类型和指针所指向的类型应当是相同的,但也有例外,讨论之前,区分下两个概念,
所谓指针类型,指的是声明指针变量时位于变量名前的“类型*”,而所谓指针所指向的类型,
指的是为指针初始化或赋值的变量类型。
理解两个类型的不同是掌握C语言指针关键所在,本节从以下2个方面讲述,
让大家体会两者的不同:
指针的类型和指针所指向的类型相同时,指针的赋值。
指针的类型和指针所指向的类型不同时,指针的赋值。4.一个指针的值是A,即是说该指针指向了以A为首地址的一片内存区域;反之,说一个指针指向了某内存区域,即是说该指针的值是这块内存区域的首地址。5.指针变量的值决定了地址从哪里开始,指针变量的类型决定了数据解析方式


指针运算


1.若有p=a(p指向数组a),则:
p++(或p+=1),表示p指向下一元素。
*p++与*(p++)等价。同样优先级,结合方向为自右向左。


*(p++) 与*(++p)。

前者是先取*p的值,后使p值加1,相当于a[i++];后者是先使p加1,再取*p,相当于a[++i]。
(*p)++表示p所指向的元素值加1,
而非指针值加1。
2.指针变量所支持的另一种运算方式是两个同类型指针相减,返回值是个有符号整数


举例来说,指针p1指向sz[i],指针p2指向sz[j],那么p1-p2=i-j,两个指针的距离并不是其值简单做差,还要除以“指针所指类型占用的内存字节数”。
指针相减多应用于同一块内存(如数组,或一块动态申请的内存)中,如果两个指针所指向的元素没有结构上的关系,指针相减的结果将是不可预测的,打个比方来说,对一条街上的两个门牌,相减大致可以判断出中间隔了多少间房子,而在不同街道甚至是不同城市的门牌作差,是没有什么实际意义的。
3.数组名是表示数组首地址的地址常量
注意:数组名a不代表整个数组,只代表数组首元素的地址。
“p=a;”的作用是“把a数组的首元素的地址赋给指针变量p”,
而不是“把数组a各元素的值赋给p”。
4.a[0]代表a[0][0]的地址
a[0]+1代表a[0][1]的地址
a[0]+2代表a[0][2]的地址
a[0]+3代表a[0][3]的地址5.输出二维数组任一行任一列元素的值。#include <stdio.h>
int main()
{int a[3][4]={1,3,5,7,9,11,13,15,
                                   17,19,21,23}; 
  int (*p)[4],i,j; 
  p=a; 
  printf(“enter row and colum:");
  scanf(“%d,%d”,&i,&j); 
  printf(“a[%d,%d]=%d\n”,
                             i,j,*(*(p+i)+j));
  return 0;
}


#include <stdio.h>
int main()
{
int a[3][4] = { 1,3,5,7,9,11,13,15,17,19,21,23 };
int(*p)[4], i, j;
p = a;
printf("enter row and colum:");
scanf("%d, %d", &i, &j);
printf("a[%d, %d] = %d\n",i, j, *(*(p + i) + j));
return 0;
}


*(*(p + i) + j))和p[i][j]是等价的


数组作为函数的参数
1.用指向数组的指针作函数参数
一维数组名可以作为函数参数,多维数组名也可作函数参数。
用指针变量作形参,以接受实参数组名传递来的地址。
可以有两种方法:
①一维数组用指向变量的指针变量
②二维数组用指向一维数组的指针变量。实参数组名是指针常量,但形参数组名是按指针变量处理
在函数调用进行虚实结合后,它的值就是实参数组首元素的地址
在函数执行期间,形参数组可以再被赋值
void fun (arr[ ],int n)
{ printf(″%d\n″, *arr); 
   arr=arr+3;                
   printf(″%d\n″, *arr);  
}
函数指针
1.如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址,称为这个函数的指针。
2.可以定义一个指向函数的指针变量,用来存放某一函数的起始地址,这就意味着此指针变量指向该函数。例如:
      int (*p)(int,int);
   定义p是指向函数的指针变量,它可以指向类型为整型且有两个整型参数的函数。p的类型用int (*)(int,int)表示3.定义指向函数的指针变量的一般形式为 
数据类型 (*指针变量名)(函数参数表列);
    如 int (*p)(int,int);
    p=max;   对
    p=max(a,b); 错
    p+n,p++,p--等运算无意义



4.指向函数的指针变量的一个重要用途是把函数的地址作为参数传递到其他函数
指向函数的指针可以作为函数参数,把函数的入口地址传递给形参,这样就能够在被调用的函数中使用实参函数



5.定义返回指针值的函数的一般形式为
    类型名 *函数名(参数表列);用随机数生成一个数组,写一个函数查找最小的数,并返回最小数的地址。在主函数中打印出来最小数。



















转载于:https://my.oschina.net/shengmingqijiquan/blog/663050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值