设为首页 加入收藏

TOP

[ndk,1]ndk开发,C语言入门讲解(二)
2014-11-23 21:12:24 来源: 作者: 【 】 浏览:22
Tags:ndk 开发 语言 入门 讲解
hort s = 278;

int i = 2777777; //4个byte

int* p = &i;

short* q = &i; // short 在内存空间里面占用的是两个 byte

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

printf("*q=%hd\n",*q);

system("pause");

}

3、不能使用已经被系统回收掉的内存空间里的数据:

六、案例:交换两个数字.

通过修改地址里面的值 达到了交换数据的目的

#include

void swap2(int* p, int* q){//p代表的是 i的地址, q代表的是 j的地址

// 把i变量和 j变量的地址 传递给了子函数,在子函数里面直接通过修改地址里面的值 达到了交换数据的目的

// *p 代表的就是 i变量

// *q 代表的就是 j变量

int temp;

temp = *p;

*p = *q;

*q = temp;

}

//主方法

main(){

int i = 3;

int j = 5;

// swap(i,j);

swap2(&i,&j);

printf("i=%d\n",i);

printf("j=%d\n",j);

system("pause");

}

七、指针的作用:

1、直接访问硬件 (opengl 显卡绘图)

2、 快速传递数据(指针表示地址)

3、 返回一个以上的值(返回一个数组或者结构体的指针)

例:在子函数中同时修改两个变量对应的值:

#include

//相当于是让子函数 修改了主函数里面连个数据的值, 子函数返回一个以上的数据

void f(int* p , int* q){ // p表示的是i的地址, q代表的是 j的地址

*p = *p+3;

*q = *q+3;

}

main(){

int i = 3;

int j = 5;

f(&i,&j); //调用子函数

printf("i=%d\n",i);

printf("j=%d\n",j);

system("pause");

}

4、 表示复杂的数据结构(结构体)

5、 方便处理字符串

// c语言是没有String类型的 要在c语言里面表示一个字符串 一般都是通过字符数组的方式表示

#include

main(){

// char arr[]={'h','e','l','l','o'};

//char类型的指针变量

char* arr ="hello";

//输出字符传

printf("%s\n",&arr[0]);//arr[0]字符数组的首地址。

system("pause");

}

6 、指针有助于理解面向对象

八、指针和数组之间的关系:

1、数组:

数组在内存中是一块连续的内存空间。

数组的名称 等于数组中第一个元素的地址(首地址)。

int arr[]={1,2,3,4};

printf("arr = %#x \n",arr);

printf("第一个元素的地址为%#x\n",&arr[0]);

上面两行代码输出的值相同。

2、指针操作数组:

例:开发一个子方法 把数组的每一个元素都打印出来

#include

// 第一个参数 数组的首地址, 第二个参数 数组的长度

void printArr(int* parr , intlen){

int i;

for( i=0;i

//输出方式一:根据数组的下标获取数组中的值:

printf("arr[%d]=%d\n",i,parr[i]);

// *parr //数组第一个元素对应的内容

//*(parr+1) 获取数组第二元素对应的内容(因为内存是连续的空间)

printf("arr[%d]=%d\n",i,*(parr+i));

}

}

main(){

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

printArr(arr,9);

system("pause");

}

九、指针的运算:

1、指针的运算只对连续的内存空间才有意义,数组是一块连续的内存空间:

例:数组元素指针之间的运算:

#include

main(){

//数组是一块连续的内存空间

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

// int* arr0 = &intarr[0];

int* arr0 = intarr;//数组第一个元素的地址

int* arr1 = &intarr[1];

int* arr2 = &intarr[2];

printf("arr0地址为%#x\n",arr0);

printf("arr1地址为%#x\n",arr1);

printf("arr2地址为%#x\n",arr2);

printf("arr2与arr0之间的距离为%d\n", arr2 - arr0);

// 指针的运算 相减和相加得到的结果其实都是 内存地址的偏移量,不是单纯的内存地址整数加减结果.结果代表的有特殊的业务含义, 几个内存空间之间的偏移量.

char chararr[] ={'1','2','3','4','5'};

// int* arr0 = &intarr[0];

char* chararr0 = chararr;//数组第一个元素的地址

char* chararr1 = &chararr[1];

char* chararr2 = &chararr[2];

printf("chararr0地址为%#x\n",chararr0);

printf("chararr1地址为%#x\n",chararr1);

printf("chararr2地址为%#x\n",chararr2);

printf("chararr2与chararr0之间的距离为%d\n", chararr2 - chararr0);

system("pause");

}

九、指针的长度:

#include

main(){

//在32位的操作系统上, 2的32次方个内存地址 4个byte

// 在我当前的32电脑操作系统上 用的devcpp工具, gcc

int i =3;

int* ip = &i;

double d = 3.14159;

double* dp = &d;

float f = 6.28f;

float* fp = &f;

short s = 255;

short* sp = &s;

//指针的长度都为4。

printf("int的指针长度为%d\n", sizeof(ip));

printf("double的指针长度为%d\n",sizeof(dp));

printf("float的指针长度为%d\n",sizeof(fp));

printf("short的指针长度为%d\n",sizeof(sp));

system("pause");

}

十、动态内存和静态内存:

1、动态内存

动态内存创建在堆空间上的 一块不连续的内存空间 可以占用整个操作系统的全部内存

堆内存就是操作系统维护的剩余的内存空间,

在java里面new出来的的所有的对象都是分配在堆内存里面。

C语言里面,申请堆内存空间使用malloc 函数。

malloc函数接受一个参数 ,参数代表动态的在堆内存申请多大的内存空间.

malloc的返回值 代表的是申请的这块内存空间的首地

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Windows Sockets:背景知识 下一篇Windows Sockets:使用带存档的套..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: