C语言指针1
来源:互联网 发布:淘宝店铺租赁平台 编辑:程序博客网 时间:2024/06/05 11:06
数组与指针
数组的名字是第一元素的地址。
#include <stdio.h>int main(){ char str[128]={'a'}; printf("str 的地址是:%p\n", str); printf("str[0] 的地址是:%p\n", &str[0]);}
输出:str 的地址是:000000000062FDC0str[0] 的地址是:000000000062FDC0
数组相邻每一元素之间相差值 = 数据类型的宽度
#include <stdio.h>int main(){ int a[3] = {1,2,3}; float b[3] = {1.1, 2.2, 3.3}; double c[3] = {1.1, 2.2, 3.3}; printf("a[0] -> %p a[1] -> %p a[2] -> %p\n", &a[0],&a[1],&a[2]); printf("b[0] -> %p b[1] -> %p b[2] -> %p\n", &b[0],&b[1],&b[2]); printf("c[0] -> %p c[1] -> %p c[2] -> %p\n", &c[0],&c[1],&c[2]); }
输出:a[0] -> 000000000062FE40 a[1] -> 000000000062FE44 a[2] -> 000000000062FE48b[0] -> 000000000062FE30 b[1] -> 000000000062FE34 b[2] -> 000000000062FE38c[0] -> 000000000062FE10 c[1] -> 000000000062FE18 c[2] -> 000000000062FE20
指向数组的指针:
#include <stdio.h>int main(){ int a[3] = {1,2,3}; int *p = &a[0]; printf("*p = %d *(p+1) = %d *(p+2) = %d ",*p, *(p+1), *(p+2));}
输出:*p = 1 *(p+1) = 2 *(p+2) = 3
#include <stdio.h>#include <string.h>//strlen函数的实现 int main(){ char str[]="www.baidu.com" ; char *tag = str; int count = 0; while(*tag++ != '\0'){ count++; } printf("strlen(str) = %d, count = %d",strlen(str),count);}
输出:strlen(str) = 13, count = 13
指针数组和数组指针:
指针数组
定义格式 :int *p[5];//数组每一元素都是整形的指针,存放的地址
数组指针
定义格式 :int (*p)[5];//指向数组地址的指针
#include <stdio.h>int main(){ int tmp[5] = {2,3,4,5,6}; int (*p)[5] = &tmp; for(int i = 0; i < 5; i++){ printf("%d\n", *(*p+i)); }}
输出:23456
指针与二维数组
array[i][j];//二维数组*(array+i)表示 &array[i][0] == array[i]*(*(array+i)+j) 表示array[i][j]
#include <stdio.h>int main(){ int array[2][3] ={{1,2,3}, {4,5,6}}; int (*p)[3] = array; //其实array是指向三个元素的数组指针 printf("**(p+1) = %d\n", **(p+1)); printf("**(array+1) = %d\n", **(array+1)); printf("array[1][0] = %d\n", array[1][0]); printf("*(*(p+1)+2) = %d\n", *(*(p+1)+2)); printf("*(*(array+1)+2) = %d\n",*(*(array+1)+2)); printf("array[1][2] = %d\n", array[1][2]);}
输出:**(p+1) = 4**(array+1) = 4array[1][0] = 4*(*(p+1)+2) = 6*(*(array+1)+2) = 6array[1][2] = 6
void指针定义:void *p可以指向任一数据类型的指针一般不对void指针解引用。可以先转化类型 再解引用demo: a = 123;int *pi = &a;void *pv = pi;printf("%d", *((int *)pv);
指向指针的指针
#include <stdio.h>// int main(){ int num=520; int *p=# int **pp=&p; printf("num=%d\n",num); printf("*p:%d\n",*p); printf("*pp:%d\n",**pp); printf("&p:%p,&pp:%p\n",&p,pp); printf("&num:%p,p:%p,*pp:%p\n",&num,p,*pp);//*pp==p==&num}
输出: num=520 *p:520 *pp:520 &p:000000000022FE38,&pp:000000000022FE38 &num:000000000022FE44,p:000000000022FE44,*pp:000000000022FE44
//数组指针与二维数组#include <stdio.h>int main(){/* int array[10]={0,1,2,3,4,5,6,7,8,9}; int *p=array; int i; for(i=0;i<10;i++){ printf("%d\n",*(p+i)); }*/ int array[3][4]={ {0,1,2,3}, {4,5,6,7}, {8,9,10,11} };// int **p=array; int (*p)[4]=array;//4列 int i,j; for(i=0;i<3;i++){ for(j=0;j<4;j++){ printf("%d ",*(*(p+i)+j));// printf("%d ",*(*(array+i)+j)); } printf("\n"); }// printf("p:%p,array:%p\n",p,array);// printf("p+1:%p,array+1:%p\n",p+1,array+1); return 0;}
输出:0 1 2 34 5 6 78 9 10 11
阅读全文
0 0
- C语言指针1
- C语言 指针1
- c语言-指针(1)
- C语言 指针1
- C语言--指针1
- C语言指针1
- C语言指针(1)
- C语言指针1
- C语言指针1
- C语言指针练习1
- C语言-指针(1)
- C语言-指针(1)
- C语言指针1-定义
- C语言指针详述(1)
- C语言指针基础(1)
- c语言指针知识(1)
- C语言高级指针(1)
- C语言系列--指针1
- 关于commondBuff
- 增量式数字PID算法的Matlab实现
- Thread与Runnable的关系
- Delphi程序带参数运行
- ios 分类添加属性的问题
- C语言指针1
- Docker容器内外互相拷贝文件
- 嗯....零乱知识点map和字符串转换的
- 多个Fragment之间的切换,该用什么方法呢?
- Android中为什么使用@override
- Nginx配置负载均衡
- USART串口--浅谈
- 文件读取
- 矩阵 乘法