c语言指针优秀代码,10.C语言指针3案列代码

本文详细解析了C语言中指针、数组及其操作,包括数组指针的使用、指针增减的内存效果,以及mylist、yourlist等函数的实际应用。通过实例展示了如何在函数间传递数组和指针,并探讨了内存分配与释放。重点在于帮助读者掌握基本的C语言数据结构和内存理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#import

void list(int * p,int lenth);

void mylist(int (* p)[3],int lenth);

void yourlist(int (* p)[3][3],int lenth);

//int * p :表示 &arr[0] &arr[1] &arr[2]

//int (* p)[3]:P++; arr[0][0]/arr[0][1]/arr[0][2] ;arr[1][0-2];arr[2][0-2]

int fun(int,int,int);

int main(int argc, const char * argv[])

{

@autoreleasepool {

// int a,b,c,d,e;

// int * p [10];

// //p离【】最近,所以是数组,而数组中有个10长度,就有10个指针变量。

// //数组元素为指针的数组。

// p[0]=&a;

// p[1]=&b;

// p[2]=&c;

// p[3]=&d;

// p[4]=&e;

// *p[0]=8;

// printf("%d\n",*p[0]);

// printf("%lu\n",sizeof(int * [10]));

// printf("%lu\n",sizeof(p[0]));

// int arr[10];

// int (* p) [10];

// //它是一个指针,指向一个数组的指针。

// p=&arr;

// //arr:表示数组第一个元素的第一个字节的地址 ,假设:101

// //&arr:表示数组的第一个字节的地址。假设:101

// //地址相同、类型不同

// printf("%p\n",p);

// p++;

// printf("%p\n",p);

// 练习:

// 1》int (*p)[10];

// int **q;

// int * x[10];

// p++; 是加多少?40个字节

// q++; 是加多少?8个字节

// x++; 是加多少?x表示的十数组,不可以自加;

// p++; 是加多少?40

// int a[10];

// int (*p)[10]=&a;

// printf("%d\n",p);//输出数组的第一个字节的地址;

// p++;

// printf("%d\n",p);//输出第二个数组的第一个字节数的地址,所以是家40;

// q++; 是加多少?8个字节。

// int **q;

// int *p;

// int a=1,b=2;

// p=&a;

// q=&p;

// *q=&b;

// printf("%d\n",q);//输出a的首地址;

// printf("%d\n",*p);//指针p储存了a的地址,q存储了指针p的地址,现在用*q修改了指针p的值,所以p存储了b得地址,所以p指向了b,所以*p等于b;

// q++;

// printf("%d\n",q);//指针q加一指,加了一个指针;

// 例子:

/* int *n;

int a[2];

n=a;

printf("%p\n",n);

n++;

printf("%p\n",n); //加了4个字节,n相当于加了一个整型数组元素也就是4个字节

int arr[10];

int (*p)[10];

p=&arr;

printf("%d\n",p);

p++;

printf("%d\n",p);//加了40个字节 p相当于加了一个数组

*/

// int a=0;

// int b=0;

// int * p;

// p = &a; //p指向变量a

// * p = 3;//*p=a所以a=3;b=0;

// printf("%d %d\n",a,b);

// int * * q;

// q = &p; //q指向指针p

// * q =&b;

// * p = 5;

// printf("%d %d\n",a,b);

// 例子:

/* int a=0;

int b=0;

int * p;

int * * q;

q = &p; //q指向指针p

* q =&b;

* p = 5;

printf("%d %d\n",a,b);

解释 因为a=b=0;

q=&p;==》q指向了p; *q=&b;==》p=&b 因为*p=5==》b=5;a=0;

*/

// int ar[5] = {1,2,3,4,5};

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

// list(ar, 5);

// printf("\n");

// void (* p) (int (* p)[3],int lenth)=mylist;

// p(arr, 3);

// int (* q)(int,int,int)=fun;

// int a = malloc(4);

// a=4;

// printf("%d\n",a);

// free(a);

char * ch = malloc(100);

// ch = "hello";

strcpy(ch, "hello world");

free(ch);

printf("%s\n",ch);

// free(ch);

}

return 0;

}

void list(int * p,int lenth)

{

for (int i=0; i

printf("%d ",p[i]);

}

}

void mylist(int (* p)[3],int lenth){

for (int i=0; i

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

printf("%d ",p[i][j]);

}

printf("\n");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值