首页 > 代码库 > C语言指针轻松入门
C语言指针轻松入门
& 表示取地址
* 表示取值
常量指针
指向一个常量的指针,
int a = 4;
int b = 6;
int const *p = &a; //常量指针
*p = 66; // 不能修改,指向的值是个常量(不能通过指针改变)(只可以读取,不可改变,函数参数chage(int const *p))
a = 44; // 变量自身可以修改 p = &b;
指针常量
一个常量的值时指针;
int c = 66;
int d = 99;
int *const pn = &c;
c = 100; // 可以修改
// pn = &d; // 不可以修改,因为 指针pn是常量类型的指针
*pn = 1010; // 可以通过指针修改指向的值
printf("%d",c);
指向常量的指针常量
------------------------------------------------------
const(*号)左边放,我是指针变量指向常量;
const(*号)右边放,我是指针常量指向变量;
const(*号)两边放,我是指针常量指向常量;
指针变量能改指向,指针常量不能转向!
要是全都变成常量,锁死了,我不能转向,你也甭想变样!
----------------------------------------------------------------
指针指向多维数组
int map[4][3] = {
{1,2,3},
{4,5,6},
{7,8,9},
{17,18,19}
}
int (*p)[3] = map;
p指针可以看做这样一个形式:
p[3] = map地址{
map[0]地址,
map[1]地址,
map[2]地址
}
map 地址:保存的是map[0]的地址,map[0]地址也是取map[0][0]来保存的。
*map 地址: 保存的是map[0][0]的地址, 虽然地址与map相同但是占用大小不同
p :同上
*p:同上
*map+1 : 取得值是map[0][1]的一个地址。
*p+1:同上
map+1 : 取得值是map[1] / map[1][0]的一个地址
p+1 : 同上
*(map+1): 先取得map[1][0]的地址,再取值 , = 4
//地址相同
printf("p:\t%p\n", p);
printf("map:\t%p\n", map);
printf("*map:\t%p\n", *map);
printf("*p:\t%p\n", *p);
//地址相同
printf("map+1:\t%p\n", map+1);
printf("*(map+1):\t%p\n",*(map+1));
printf("p+1:\t%p\n",p+1);
printf("*(p+1):\t%p\n", *(p+1));
//地址相同
printf("*p+1:\t%p\n", *p+1);
printf("*map+1:\t%p\n", *map+1);
详细代码
int map[4][3] = {
{1,2,3},
{4,5,6},
{14,15,16},
{7,8,9}
};
int (*p)[3] = map;
printf("%d\n", *(*p+1));
printf("%d\n", *(*(p+1)));
printf("%d\n", *(*(map+1)));
printf("p:\t%p\n", p);
printf("map:\t%p\n", map);
printf("*map:\t%p\n", *map);
printf("*p:\t%p\n", *p);
printf("map+1:\t%p\n", map+1);
printf("*(map+1):\t%p\n",*(map+1));
printf("p+1:\t%p\n",p+1);
printf("*(p+1):\t%p\n", *(p+1));
printf("*p+1:\t%p\n", *p+1);
printf("*map+1:\t%p\n", *map+1);
本文出自 “90设计工作室” 博客,转载请与作者联系!
C语言指针轻松入门
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。