指针与数组
来源:互联网 发布:淘宝产品推广方案 编辑:程序博客网 时间:2024/06/15 00:12
数组指针与函数指针
typedef
typedef char (*PTR_TO_ARR)[30];
表示PTR_TO_ARR是类型int *[4]的别名,它是一个二维数组指针类型;接着可以使用PTR_TO_ARR定义二维数组指针;
PTR_TO_ARR p1,p2;
按照类似写法,可以为函数指针定义别名;
typedef int (*PTR_TO_FUNC)(int,int);
typedef char(*PTR_TO_ARR)[30];
typedef int(*PTR_TO_FUNC)(int, int);
#include <stdlib.h> #include<stdio.h> int max(int a, int b) { return a > b ? a : b; } char str[3][30] = { "http://baidu.com", "http://google.com", "http://yu.com" }; int main() { PTR_TO_ARR parr = str; PTR_TO_FUNC pfunc = max; int i; printf("max:%d\n", (*pfunc)(10, 20)); for (i = 0; i < 3; i++) { printf("str[%d]:%s\n", i, *(parr + i)); } getchar(); return 0; }
一级指针
函数的副本机制,使得函数内部无法改变外部变量(数组是一个例外,拒绝副本机制,结构体是副本),因此数组名字当做参数时候是地址
同时数组作为参数,改变数组等于直接操作外部数组
void test(int a[10]){ printf("test=%d\n", sizeof(a)); //8(数组名,是个指针) int b[10]={1,2,3,4,5,6,7,8,9,0}; printf("\n test b=%d", sizeof(b)); //40}void main(){ int a[10]={1,2,3,4,5,6,7,8,9,0}; printf("main a=%d", sizeof(a)); //40 printf("\n%d\n", sizeof(a)/ sizeof(int)); //10 test(a);}
作用:
1.函数内部改变外部变量(间接修改一个数据); 2.跨进程改变变量(外挂); 3.数组作为参数(数组会退化为一个指针),一级指针可以作为函数的形式参数,接受数组首地址; 4.一级指针可以存储一个数组首地址; 5.函数的返回值无法取地址; 6.作为函数返回值,返回地址,但是不能返回指向栈的地址;
函数执行完成后内存被回收,但是还没有使用,是原来的值
数组名编译器作了特殊处理,因此
int *p=a;sizeof(p);//8sizeof(a);//40p[i]=a[i]=*(p+i);&p[i]=p+i;
int go(){ int a=3; return a;}int *go(){ int a=3; return &a;}//return也有副本机制,存储在寄存器里面int main(){ printf("%d,%p",go(),&go());//错误,没有办法&go() int *p=go1(); //*p此时还是3(其实此时内存已经被回收,但是由于中间没有插入其他代码,所以此时内存中的值还是3;如果加入了printf("\n\n\n"),那么*p就不是3了) //但是go1()加入static int a=3;此时a就不能栈区了,*p还是3 printf("%d,%p\n",*p , p); }
void main(){ //p存储的是这个字符串首地址 char *p="tasklist & pause"; //指针存储地址 system(p);//先打印出进程,然后出现暂停窗口 *p='a'; //编译没有问题,但是执行的时候内存冲突; //常量字符串不可以修改}
0 0
- 指针:指针与数组
- 指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组 与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- Android UI绘制流程(二)
- 实验四-dpcm编码
- hihoCoder 1066 : 无间道之并查集
- SELECT语句语法格式
- 09 WebGL通过uniform变量修改点的颜色
- 指针与数组
- 有限状态机时序电路设计之检测连续四个0或1的个数
- maven创建java项目
- GitHub上fork别人的项目,并保存同步方法
- Docker学习笔记(一)
- 16. 导入开源库 java.lang.NoClassDefFoundError: rx.plugins.RxJavaPlugins
- Struts2 Action中获得Request,Response,Session对象的几种常用方法
- LeetCode118 Pascal's Triangle
- C# WinForm开发系列之DataRepeater控件的使用(显示数据的基础使用和自定义使用)