#include <stdio.h>
#include <stdlib.h>
#include <string.h> void f (int **p); void change(int *tmp_t)
{ *tmp_t =1; return;
}
/*
这个函数才是真正的交换
*/
void real_swap(int *real_a, int *real_b)
{
int real_tmp; real_tmp = *real_a;
*real_a = *real_b;
*real_b = real_tmp;
} void swap(int *a1,int *b1)
{
int *tmp=NULL;
tmp=a1;
a1=b1;
b1=tmp;
} void memorylocate(char **ptr)
{
*ptr=(char *)malloc(1*sizeof(char));
} int main(void)
{
int a=2;
int b=3; const char *ptr = (char*)&a;
/*常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,
常量指针可以指向其他的地址。
*/
ptr = (char*)&b;//is legal /*常量指针说的是不能通过这个指针改变变量的值,
但是还是可以通过其他的引用来改变变量的值的。*/
//*ptr = (char)5; //error: assignment of read-only location
b = 5;
a = 9; int *m = &a;
int * const npt = &a;
a = 9;
*npt = 18;
*m = 20;
/*指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向改地址的指针来修改。
*/
//npt = &b; error: assignment of read-only variable `npt' printf("Before swap a=%d b=%d\n",a,b);
swap(&a,&b);
printf("After swap a=%d b=%d\n",a,b);
real_swap(&a,&b);
printf("After swap a=%d b=%d\n",a,b); char *buffer = (char*)&a;
memorylocate(&buffer);
strcpy(buffer,"12345");
printf("buffer %s\n",buffer); int bita = 0;
bita = bita | (0x1f << 3) | (0x07 << 23); bita = 0;
//bita |= ('0b'11111<<3); //int * p = (int * ) malloc (4 * sizeof(int));
int * p = (int * ) malloc (8);
char * cp = (char * ) malloc (4 * sizeof(char));
if(NULL == p)
{
printf("malloc failed\n");
return -1;
} if(NULL == cp)
{
printf("malloc failed\n");
return -1;
} *(p+0) = 1;
*(p+1) = 3;
*(p+2) = 5;
*(p+3) = 4;
*(cp+0) = 1;
*(cp+1) = 3;
*(cp+2) = 5;
*(cp+3) = 4;
//*(p+4) = 6; //编译通过,但无法运行。
printf("%d\n", *(p+3)); free (p); free (cp); // int i=90;
// *(int *)0x28ff00 = 0x130;
//// int n =0,*p = &n,**q = &p;
//// double *b = (double *)malloc(sizeof(int));
//// b=0;
//// b=NULL;
// printf("0x%0x\n",&i);
// printf("Hello world!\n");
//
// int * a ;
// a = NULL ;
// f (&a);
// printf("%d",*a);
// free(a);
//
// int in = 11;
// int *p, *q;
//
// p = &in;
// q = &p;
//
// *p = 40;
// //(**q) = 60;
// int tmp = 0;
//
// change(&tmp);
//
// printf("################ tmp = %d /n");
// ;
// return 0;
} /*
c语言实现函数给主函数中的指针赋值的方法 */
void f (int **a)
{
*a = (int *)malloc (sizeof (int )) ;
**a = 1 ;
}
Before swap a=20  b=5
After swap a=20 b=5
After swap a=5 b=20
buffer 12345
4 Terminated with return code 0
Press any key to continue ...

C语言——杂实例的更多相关文章

  1. MATLAB与C语言对比实例:随机数生成

    MATLAB与C语言对比实例:随机数生成 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.整型随机数生成函数 1.C语言程序 int intrand ...

  2. R语言入门级实例——用igragh包分析社群

    R语言入门级实例——用igragh包分析社群 引入—— 本文的主要目的是初步实现R的igraph包的基础功能,包括绘制关系网络图(social relationship).利用算法进行社群发现(com ...

  3. c语言字符串实例

    例子:涉及字符串.字符.指针.++等 例一:字符串与字符 #include <stdio.h> void reverse(char *str) { char *end=str; print ...

  4. c语言编程实例——小球跳动

    1.预备知识 1.1 相关头文件 "#include"是c语言中用以申明所需调用的库函数或自定义函数的头文件路径及文件名.#include ""和#includ ...

  5. R语言学习——实例标识符

    > patientID<-c(1,2,3,4)> age<-c(25,34,28,52)> diabetes<-c("Type1"," ...

  6. 分离链接散列表C语言实现实例

    /* hash_sep.h */ #ifndef _HASH_SEP_H #define _HASH_SEP_H #define MIN_TABLE_SIZE 5 struct list_node; ...

  7. 在Golang中使用C语言代码实例

    转自:http://www.jb51.net/article/56720.htm cgo 使得在 Golang 中可以使用 C 代码. Hello World 为了有一个较为直观的了解,我们来看一个简 ...

  8. go语言基础实例

    一:变量 1)变量声明 func main() { var v1 int var v2 int //一次声明多个变量 var ( v3 int v4 int ) //变量最开始会有一个零值 fmt.P ...

  9. C语言链表实例--玩转链表

    下图为最一简单链表的示意图: 第 0 个结点称为头结点,它存放有第一个结点的首地址,它没有数据,只是一个指针变量.以下的每个结点都分为两个域,一个是数据域,存放各种实际的数据,如学号 num,姓名 n ...

随机推荐

  1. java知识链接

    Java内存模型简称jmm: 它定义了一个线程对另一个线程是可见的,另外就是共享变量的概念,因为Java内存模型又叫做共享内存模型,也就是多个线程会同时访问一个变量,这个变量又叫做共享变量, 共享变量 ...

  2. java 比较两个日期大小(2) 用before(), after()

    调试代码,我就不整理了,记下after()  before() 觉得这张图好美,从人家的博客上截的,找不到链接了

  3. SGU 194 Reactor Cooling (无源上下界网络流)

    The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nuclear ...

  4. LYOI2016 Summer 一次函数 (线段树)

    题目描述 fqk 退役后开始补习文化课啦,于是他打开了数学必修一开始复习函数,他回想起了一次函数都是 f(x)=kx+b的形式,现在他给了你n个一次函数 fi(x)=kix+b,然后将给你m个操作,操 ...

  5. EditText设置/隐藏光标位置、选中文本和获取/清除焦点(转)

    转:http://blog.csdn.net/dajian790626/article/details/8464722 有时候需要让光标显示在EditText的指定位置或者选中某些文本.同样,为了方便 ...

  6. meta标签 使用说明(http-equiv、refresh、seo)

    meta标签 使用说明(http-equiv.refresh.seo) meta标签,是在head标签里面,一般用做页面描述的.它的内容,用来描述页面一些信息的,如类型.编码.作者.简介等!虽然,它不 ...

  7. 【原】webpack--文件监听的原理

    轮询判断文件的最后编辑时间是否发生变化,一开始有个文件的修改时间,先存储起来这个修改时间,下次再有修改就会和上次修改时间比对,发现不一致的时候不会立即告诉监听者,而是把文件修改缓存起来,等待一段时间, ...

  8. hdu 5517 Triple

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5517 ------------------------------------------------ ...

  9. PS操作

    笔:B 橡皮:E 新建:C+N 选取套索:L 套索后按Alt,移动 放大:Ctrl + “+” 或 Z 缩小:Ctrl + “-” 或 Alt Z / Alt ,然后用滑轮控制大小 撤销:Ctrl + ...

  10. 蓝桥杯:排它平方数-java

    问题描述: 小明正看着 203879 这个数字发呆.原来,203879 * 203879 = 41566646641这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同 ...