前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言——杂实例

C语言——杂实例

作者头像
用户4645519
发布2020-09-07 11:05:49
7520
发布2020-09-07 11:05:49
举报
文章被收录于专栏:嵌入式学习嵌入式学习
代码语言:javascript
复制
#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 ;
}
代码语言:javascript
复制
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 ...
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档