【C】指针、引用和数组
2016-12-23 16:14
253 查看
在大多数C语言书籍中,指针和引用常常大篇幅介绍,然后一大堆示例程序,让人觉得不明所以。在编程中,自己也不敢乱用,害怕又搞出些野指针,空指针什么的。其实这部分,现在看来并不需要了解这么多东西。只要记住,C语言中,有一个可以存地址的变量类型,比如int *,就是存int地址的变量。至于引用&,一般很少用作变量类型的。&主要和*一样作为运算符的存在比较多。虽然术语不规范,但完全可以将&理解为取地址的运算符,*则是取该地址内容的运算符。
一个程序可以说明这点:
#include<stdio.h>
//17行对应的指针作为函数参数的使用示例
void change_element(int *p){//直接改变该地址所对应的内容为11
*p=11;//利用这方法,能解决函数需要有多个返回值的问题
}
int main(){
int int_element=999;//定义一个变量
int int_array[10]={1,2,3,4,5,6,7,8,9,10};//定义一个数组
int *pointer1,*pointer2;//定义两个存int地址的变量,也就是指针
pointer1=int_array;//数组名,实质上就是一个存着数组首元素地址的不可变指针const int*
//现将这个地址赋值给pointer1
printf("%d\n",*pointer1);//通过取内容符*,将pointer1这个地址所对应的内容读出来打印
pointer2=&int_element;//通过取地址符&,将int变量所对应的地址,赋值给pointer2
printf("%d\n",*pointer2);//通过取内容符*,将pointer2这个地址所对应的内容读出来打印
//指针作为函数参数的使用示例
change_element(pointer1);//此函数将直接改变数组首位置的内容
printf("%d\n",int_array[0]);
change_element(pointer2);//此函数将直接改变指针指向的内容
printf("%d\n",int_element);
return 0;
}运行结果如下:
大家需要厘清的一点,就是int *和*是没有任何关系的,int *是定义一个存int的地址的东西,*某个int *变量,则是取这个int *变量地址所对应的内容。
&某个int,能将这个int所对应的地址存到int *变量中。
而你定义了一个数组,实质上也定义了一个指向这个数组第0个运算的const int*变量,该const int*变量的名称就是你写的函数名。
C语言的指针就是这么简单,其作用主要用来优雅地操作数据。
一个程序可以说明这点:
#include<stdio.h>
//17行对应的指针作为函数参数的使用示例
void change_element(int *p){//直接改变该地址所对应的内容为11
*p=11;//利用这方法,能解决函数需要有多个返回值的问题
}
int main(){
int int_element=999;//定义一个变量
int int_array[10]={1,2,3,4,5,6,7,8,9,10};//定义一个数组
int *pointer1,*pointer2;//定义两个存int地址的变量,也就是指针
pointer1=int_array;//数组名,实质上就是一个存着数组首元素地址的不可变指针const int*
//现将这个地址赋值给pointer1
printf("%d\n",*pointer1);//通过取内容符*,将pointer1这个地址所对应的内容读出来打印
pointer2=&int_element;//通过取地址符&,将int变量所对应的地址,赋值给pointer2
printf("%d\n",*pointer2);//通过取内容符*,将pointer2这个地址所对应的内容读出来打印
//指针作为函数参数的使用示例
change_element(pointer1);//此函数将直接改变数组首位置的内容
printf("%d\n",int_array[0]);
change_element(pointer2);//此函数将直接改变指针指向的内容
printf("%d\n",int_element);
return 0;
}运行结果如下:
大家需要厘清的一点,就是int *和*是没有任何关系的,int *是定义一个存int的地址的东西,*某个int *变量,则是取这个int *变量地址所对应的内容。
&某个int,能将这个int所对应的地址存到int *变量中。
而你定义了一个数组,实质上也定义了一个指向这个数组第0个运算的const int*变量,该const int*变量的名称就是你写的函数名。
C语言的指针就是这么简单,其作用主要用来优雅地操作数据。
相关文章推荐
- 参数传递时数组引用保护数组退化为指针
- 数组与字符串、字符指针与其他类型指针、赋值参数、指针参数以及引用参数、函数指针
- 【转】数组、指针、引用
- C++之数组、指针、引用
- C语言——结构体与指针引用&结构体数组与指针引用
- 通过指针引用数组元素-将数组a中n个整数按相反顺序存放
- C++指针与引用以及数组
- 对象数组,对象指针,常对象、对象的常引用
- [Happy Coding] 函数返回数组指针和数组引用
- 引用、指针与数组名
- C++编程实例-数组、指针及引用
- more effective c++ 第一章读书笔记: 指针,引用,c++类型转换,多态数组,默认构造函数
- [C/C++] 通过指针引用数组
- 数组-指针-引用
- 数组的指针和引用的写法
- 指针、引用、数组和字符串,你真的全弄清楚了吗?
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- “定义为指针,外部以数组形式引用”和“定义为数组,外部以指针形式引用”会发生什么?
- 数组指针和数组引用做参数的区别(是否能够限定数组大小、数组降价)
- 指针、引用、数组和字符串,你真的全弄清楚了吗?