黑马程序员_C语言指针的学习

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------


指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址,
内存只不过是一个存放数据的空间,你把指针指向哪儿,那么指针就在哪儿.




1.指针声明:


int main()
{    
int a = 2;
int *p = &a; // 这个&号表示取一个变量的内存地址
printf("p===%p",p);// p===0024F898
return 0;
}
 


2.指针在MAC下占8个字节,而在WINDOWS下占4个字节




64位程序占8个字节,而32程序占4个字节


3.指针就是指向一块内存的东西


4.指针的错误写法:
int *p=20;// 错误写法,指针变量只能存储地址
5.指针的&和*
   5.1 取地址运算符&,取地址运算符&是单目运算符,其功能是取变量的地址。和scanf函数的参数 
类似。
5.2 取内容运算符*, 取内容运算符*是单目运算符,用来表示指针变量所指的变量。在*运算符 
之后跟的变量必须是指针变量。




6.指针的应用:


int main()
{    
int a = 3;
int *p = &a;
*p = 6; // 这行代码相当于 a = 6,
printf("a==%d,a==%d",a,*p); // a==6,a==6
return 0;
}
 




// 这个时候a变量的值已经变成了6


6.1 指针作为参数传递


int test(int *p)
{
*p = 33;
}
int main()
{
int a = 3;
test(&a); // 这个&号表示取一个变量的内存地址
printf("a==%d",a); // a==33
getchar();
return 0;
}
 


6.2 指针指向字符串,有两种形式


int main()
{
char name[] = "itcast"; // 第一种写法
char *name1 = "itcast"; // 第二种写法
name[0]='A';
printf("name==%s\n",name); // name==Atcast 
printf("name1==%s\n",name1);// name1==itcast
return 0;
}
 


这两个的区别在与,第一个可以改变里面的字符内容,而第二个是常量字符串则不可以改 

6.3数组指针
int *arry[5]={1,2,3};
我们声明了数组大小为5的一个数组,只赋值了3个数,其他的数编译器会默认给我们赋值 
为0,我们来看看怎么访问他?
1.printf("%d",arry[1]);
2.printf("%d",arry[2]);
7.指向函数的指针
void test()
{
printf("我是test");
}




int main()
{
void(*p)();
p = test;
p(); // 我是test
return 0;
}
 


 


 ---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值